IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Créer une notification du genre Thunderbird ou MsnMessenger


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Par défaut Créer une notification du genre Thunderbird ou MsnMessenger
    Bonjour à tous et déjà merci d'avance pour essayer de maider

    Je voudrais créer une fiche qui servirait de notification.Elle serait situer en bas à droite, et serais au dessus de toutes les applications et doit etre toujours visible.

    Mon premier problème, la position.

    J'utilisais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1->Top = Screen->Height - 80;
    mais le problème est que la fiche est situé 80 px au dessus du bas de l'écran et non pas de la barre des taches comme il serait logique. Du coup, si une personne à une barre des taches plus épaisse que celle par défaut, il ne vera pas la notification.

    Le deuxieme problème est de la faire passer au dessus de toutes les autres fenetres sans leur prendre le focus et ainsi empecher de travail normalement malgrès la notification. Avant, j'utilisait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetForegroundWindow(FindWindow("Mon application",NULL));
            keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
    Combiner avec un TTimer à un interval de 1 milliseconde, le programme restait bien tout le temps au dessus des application, le problème est que nous ne pouvions plus donner le focus aux autres applications, il restait sur la fiche.

    J'aimerais créer donc une notification du meme genre que Thunderbird ou Msn Messenger...

    Merci de m'avoir lu
    Bonne journée à tous,
    FluidBlow.

  2. #2
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonjour,
    tu peux créer ta fenêtre de notification en utilisant les paramètres suivants de ta form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    object Form1: TForm1
      Left = 980
      Top = 840
      AlphaBlend = True
      AlphaBlendValue = 120
      BorderIcons = [biSystemMenu]
      BorderStyle = bsSingle
      ClientHeight = 160
      ClientWidth = 295
      Color = 16776176
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      FormStyle = fsStayOnTop
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object Label1: TLabel
        Left = 72
        Top = 40
        Width = 146
        Height = 16
        Caption = 'Ma fenêtre de notification'
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -13
        Font.Name = 'Arial'
        Font.Style = [fsItalic]
        ParentFont = False
      end
    end
    le code ci-dessus a été généré a partir de ma Form (.dfm)
    elle utilise les propriété de transparence (AlphaBlend) le niveau de transparence est réglé par la property AlphablendValue
    la fenêtre s'affiche en dessus des autre par la property FormStyle réglée sur fsStayOnTop

    il te suffit de placer ta form lors de sa conception a l'emplacement désiré.

    pour afficher ta fenêtre il suffit de faire simplement un
    ceci peut par exemple être effectué de puis un Timer ou a chaque fois qu'une notification est nécessaire

    Cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Membre éclairé Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activité : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Par défaut
    Applique ceci moi ca marche super bien.
    tu fais ta fiche la taille que tu veux, puis tu pose 2 timer dessus
    tu met la fiche en stayontop,
    puis tu l'appele comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WNotifier = new TWNotifier(Application);
       WNotifier->Show();
    voila le code de la fiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    void __fastcall TWNotifier::FormCreate(TObject *Sender)
    {
    RECT workArea;
    SystemParametersInfo(SPI_GETWORKAREA, 0, &workArea, 0);
     
    bottomMax = workArea.bottom;
    topMax = workArea.bottom - Height;
     
    Left = workArea.right - Width;
    Top = workArea.bottom;
     
    animationMode = 1;
    AnimateOpenClose->Enabled = true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TWNotifier::FormClose(TObject *Sender,
          TCloseAction &Action)
    {
     
    Action = caFree;
     
    }
    //---------------------------------------------------------------------------
    void __fastcall TWNotifier::AnimateOpenCloseTimer(TObject *Sender)
    {
    switch(animationMode){
     case 1: // apparaître
      if(Top > topMax){
     
       if(Top < topMax + (Height / 2)){
        Top = Top - 1;
       }else{
        Top = Top - 2;
       }
      }else{
       AnimateOpenClose->Enabled = false;
       WaitAndHide->Enabled = true;
      }
     break;
     case 2: // disparaître
      if(Top < bottomMax){
       Top = Top + 2;
      }else{
       AnimateOpenClose->Enabled = false;
       Close();
      }
     break;
    }
    }
    //---------------------------------------------------------------------------
    void __fastcall TWNotifier::WaitAndHideTimer(TObject *Sender)
    {
    WaitAndHide->Enabled = false;
    animationMode = 2;
    AnimateOpenClose->Enabled = true;
    }
    //---------------------------------------------------------------------------
    voila si tu as un souci fais le savoir

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Par défaut
    Bonjour

    Tous d'abord, merci à vous deux pour vos réponse très rapide, je vais les essayer, l'une et l'autre, je vous tiens au courant

    Encore merci
    FluidBlow.

    Citation Envoyé par BOUBOU81
    Applique ceci moi ca marche super bien.
    tu fais ta fiche la taille que tu veux, puis tu pose 2 timer dessus
    tu met la fiche en stayontop,
    puis tu l'appele comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WNotifier = new TWNotifier(Application);
       WNotifier->Show();
    voila le code de la fiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void __fastcall TWNotifier::FormCreate(TObject *Sender)
    {
    etc...
    AnimateOpenClose->Enabled = true;
    }
    //---------------------------------------------------------------------------
    voila si tu as un souci fais le savoir
    En fait, je ne comprend pas tout à fait comment et quand la déclaré avec "WNotifier = new TWNotifier(Application);
    WNotifier->Show();" et ici lorsqu'il y a "fastcall TWNotifier::FormCreate" sa veut dire que TWNotifier est le nom de la fiche au lieu de Form1 ?

    Désolé si je parait un peu stupide

    Merci encore à vous deux
    FluidBlow.

    non je retire, j'ai compris

    Merci énormément à vous deux, surtout DjmSoftware pour le placement au premier plan et BOUBOU81 pour le positionnement

    Encore 1000 mercis,
    Passez tout comme moi, une superbe après-midi.
    FluidBlow

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment créer une notification d'application
    Par lotfi-g dans le forum Android
    Réponses: 7
    Dernier message: 01/06/2015, 21h43
  2. Créer une commande du genre \@title ou \@author
    Par Ladgalen dans le forum Programmation (La)TeX avancée
    Réponses: 6
    Dernier message: 01/10/2009, 14h39
  3. Réponses: 4
    Dernier message: 29/04/2009, 12h53
  4. [HTML] Créer une notification de connection sur une page web
    Par Invité dans le forum Balisage (X)HTML et validation W3C
    Réponses: 28
    Dernier message: 17/03/2008, 18h52
  5. Créer une zone client spéciale (genre tableur)
    Par Spartan03 dans le forum Windows
    Réponses: 8
    Dernier message: 02/11/2005, 10h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo