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

Windows Discussion :

Comment mettre l'application dans la zone de notification ?


Sujet :

Windows

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Comment mettre l'application dans la zone de notification ?
    Bonjour,
    Je voudrais que mon application s'affiche dans la zone de notification et non pas dans la barre des tâches... ce sujet répond à la question pour les utilisateurs de C++ Builder, mais étant utilisateur de Code::Blocks, je ne sais toujours pas comment faire.

    Merci d'avance

  2. #2
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    C::B ne nous dit rien pour t'aider. Tu veux faire ça sous quel environnement et avec quelle bibliothèque?

  3. #3
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Malheureusment si tu n'utilise pas C++ Builder, tu vas être obliger d'utiliser une fonction de relativement bas niveau de Windows. Avec tous les risques que cela comporte (pbs. d'allocation, gestion des erreurs, ...). Si avec ça t'as encore envie malgrés tout de réinventer la roue, regarde la fonction ShellNotifyIcon.
    Avant de poster un message .
    Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Voici quelques pistes, issues d'un programme ancien que j'ai développé.
    L'application en question est minimisée dans "la zone de notification" au lancement. Quand on double clique sur l'icône, on offiche la fenêtre de l'appli (Visible=true).
    Une fois la fenêtre ouverte, le fait de la fermer ne provoque pas la fin de l'application mais le retour à l'état iconifié.

    Pour fermer l'appli, il faut utiliser un choix de menu affiché quand on clique avec le bouton droit sur l'icône.

    1/ Déclaration de variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NOTIFYICONDATA nid;
    bool Terminer;
    2/ Lors de la création de la fiche (à adapter à ton compilateur)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Terminer = false;
        nid.cbSize = sizeof(NOTIFYICONDATA);
        nid.hWnd = Handle;
        nid.uID = 123;
        nid.uFlags = NIF_ICON | NIF_MESSAGE;
        nid.hIcon = Icon->Handle;  // handle de l'icône à afficher 
        nid.uCallbackMessage = WM_USER + 1234;  // identifiant unique, à faire varier pour chaque appli
        Shell_NotifyIcon(NIM_ADD,&nid);
    
        ShowWindow(Application->Handle, SW_HIDE);
    3/ Gestion des évènements liés à la "tray icon" - à adapter à ton compilateur

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
          // code inséré dans la définition de la classe de fenêtre
        MESSAGE void __fastcall HandleCallback(TMessage&);
        MESSAGE void __fastcall HandleQueryEndSession(TMessage&);
        MESSAGE void __fastcall HandleEndSession(TMessage&);
        BEGIN_MESSAGE_MAP
            MESSAGE_HANDLER(WM_USER+1234, TMessage, HandleCallback);
            MESSAGE_HANDLER(WM_QUERYENDSESSION, TMessage, HandleQueryEndSession);
            MESSAGE_HANDLER(WM_ENDSESSION, TMessage, HandleEndSession);
        END_MESSAGE_MAP(TForm);
    
    
    
    // gestion de l'arrêt de l'application
    void __fastcall TForm1::OnCloseQuery(TObject *Sender, bool &CanClose)
    {
        // si l'utilisateur clique sur la croix, se contente de masquer la fenêtre
        if (!Terminer)
        {
            CanClose = false;
            Visible = false;
        }
        else CanClose = true;
    }
    
        // terminaison de l'application
    void __fastcall TForm1::OnTerminer(TObject *Sender)
    {
        Terminer = true;
        Shell_NotifyIcon(NIM_DELETE, &nid);  // fait disparaître l'icône
        Close();
    }
    
    // gestion de l'arrêt de Windows
    MESSAGE void __fastcall TForm1::HandleQueryEndSession(TMessage& Msg)
    {
        Msg.Result = 1;     // on traite le message
    }
    
    MESSAGE void __fastcall TForm1::HandleEndSession(TMessage& Msg)
    {
        if (Msg.WParam)
        {
            Terminer = true;
            Shell_NotifyIcon(NIM_DELETE, &nid);
        }
        Msg.Result = 0;
    }
    
        // fonction de traitement du message WM_USER+1234
    MESSAGE void __fastcall TForm1::HandleCallback(TMessage& Msg)
    {
        switch(Msg.LParam)
        {
            case WM_MOUSEMOVE:
                lstrcpy(nid.szTip,"Mon appli");    // message à afficher lorsque la souris
                                                            // survole l'icône
                nid.uFlags = NIF_TIP;
                Shell_NotifyIcon(NIM_MODIFY, &nid);
                break;
            case WM_LBUTTONDBLCLK:
                Visible = true;                        // affiche la fenêtre principale
                break;
            case WM_RBUTTONDOWN:
                TPoint q, p;
                q.x = Screen->Width*3/4;
                q.y = Screen->Height*3/4;
                p = ClientToScreen(q);
                MonMenu->Popup(p.x-30,p.y);  // affichage d'un menu sur clic droit
                                                           // sur l'icône
                break;
            default:
                break;
        }
    }

    Voilà, c'est fastidieux mais j'espère que cela pourra t'aider.
    Dernière chose, si tu veux modifier l'apparence de l'icône pendant le fonctionnement de ton appli, il faut utiliser l'ordre NIM_MODIFY:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        nid.cbSize = sizeof(NOTIFYICONDATA);
        nid.hWnd = Handle;
        nid.uID = 123;
        nid.uFlags = NIF_ICON;
        nid.hIcon = nouvelle_icone->Handle;
        Shell_NotifyIcon(NIM_MODIFY,&nid);
    Effectivement, avec les dernières versions de C++ Builder, il y a bien plus simple !

  5. #5
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    J'ouvre une parenthèse :

    (

    @josse : tu sais si une version récente Borland C++ est disponible de type "Student" (cad gratuite) ? Je crois que ça existe pour Delphi, enfin pas sûr.
    Perso, j'en suis resté à BCB++ 6 Pers. acheté avec mes petites économies il y a fort longtemps, maintenant ça à dût sacrêment évoluer.

    Je ferme la parenthèse :

    )
    Avant de poster un message .
    Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Pour mchk0123, va voir dans le forum C++ Builder, il y a une discussion très récente à ce sujet. Mais à priori pas de réponse satisfaisante.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/03/2010, 09h17
  2. comment lancer mon application dans la zone de notification
    Par zanoubya dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/10/2009, 19h02
  3. mettre une appli dans la zone de notification
    Par azräel dans le forum VB.NET
    Réponses: 1
    Dernier message: 12/02/2009, 12h54
  4. [vb6]Application dans la zone de notification
    Par bailamos dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/04/2007, 22h56
  5. [CODE] Application dans la zone de notification
    Par Rodrigue dans le forum C++Builder
    Réponses: 4
    Dernier message: 29/05/2003, 19h06

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