Accueil > > > CRÉEZ VOTRE PREMIÈRE TRAY ICON . CODE TRÈS SIMPLE ET ACCESSIBLE...
CRÉEZ VOTRE PREMIÈRE TRAY ICON . CODE TRÈS SIMPLE ET ACCESSIBLE...
Information sur la source
Description
Bonjour, Je sais qu'il existe déjà des sources traîtant ce sujet sur le site, mais comme j'ai malgré tout eu beaucoup de mal à m'en sortir, je me suis dit qu'une source très allégée portant UNIQUEMENT sur l'utilisation des tray icons ne ferait de mal à personne... Donc je vous livre le .cpp et le .h en esperant que ma première contribution (hé oui) sera utile à quelqu'un... Nous verrons donc la création et la suppression de l'icône ainsi que la détection d'une action de la souris sur l'icône (clik, double-clik...). L'idée du programme est en fait de "minimiser" l'IHM dans le systray. j'ai mis des guillemets parce qu'en réalité je n'utilise pas LE bouton minimiser mais un bouton disposé sur l'IHM à cet effet... toujours est-il qu'ensuite il faut double-cliquer sur l'icône pour retrouver l'IHM.
Source
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#include <windows.h>
#include <iostream.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->Hide(); //Rigolez-pas, je sais que ça sert à rien mais c'était pour
Sleep(1000); //pour voir si la fenêtre partait de la barre des tâches
Form1->Show(); //quand on la cachait...
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->Hide();
NI_Data.cbSize = sizeof( NOTIFYICONDATA );
// Cela permet à Windows de savoir avec quelle version de la structure
// on souhaite travailler
NI_Data.hWnd = this->Handle;
// C'est à ce handle que windows va envoyer les messages provenant de
// l'icône : permet de gérer les cliks, etc.
NI_Data.uID = 0;
// C'est l'identifiant de l'icône dans l'application. Cela permet à
// Windows de faire la distinction entre différents icônes de notification
// que l'application a crée.
NI_Data.hIcon = Application->Icon->Handle;
// Par défaut notre icone de notification aura le même icone que
// l'application.
NI_Data.uCallbackMessage = AM_CALLBACK_MESSAGE;
//Permet d'intercepter les messages venant du systray (cliks...)
NI_Data.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
strcpy(NI_Data.szTip, "Appli de test de trayicon");
//Permet de définir le texte de l'infobulle...
Shell_NotifyIcon(NIM_ADD,&NI_Data);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NotifyCallback(TMessage &message)
{
if ( message.WParam == 0 )
// WParam contient l'indice de l'icone de l'appication.
// En effet une application peut avoir plusieurs icones de notification
// c'est l'indice que nous avison mis dans uID de la structure de type
// NOTIFYICONDATA
{
if ( message.LParam == WM_LBUTTONDBLCLK ) //WM_RBUTTONUP, WM_LBUTTONDOWN...
{
Form1->Show();
Sleep(100); //pas indispensable mais si vous avez comme moi l'icône de MSN
//juste à côté de "la votre" vous comprendrez l'utilité :)
NI_Data.uFlags = 0;
Shell_NotifyIcon(NIM_DELETE,&NI_Data);
}
}
}
//---------------------------------------------------------------------------
Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#define AM_CALLBACK_MESSAGE WM_APP + 408
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // Composants gérés par l'EDI
TButton *Button1;
TButton *Button2;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
protected:
void __fastcall NotifyCallback ( TMessage &message );
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER( AM_CALLBACK_MESSAGE, TMessage, NotifyCallback);
END_MESSAGE_MAP(TForm);
private:
NOTIFYICONDATA NI_Data;
public:
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
Conclusion
Bon, comme je l'avais dit c'est vraiment léger, mais quand on a bien compris ça, on peut très vite et facilement améliorer... Par exemple on peut ajouter : //----------------------------------------------- ---------------------------- if ( message.LParam == WM_RBUTTONUP ) //réagit quand on relâche le clik droit { PopupMenu1->Popup( Mouse->CursorPos.x, Mouse->CursorPos.y ); //ouvre un menu popup là où se trouve la souris ;) } //------------------------------------------- -------------------------------- On peut également utiliser "Shell_NotifyIcon(NIM_MODIFY,&NI_Data);" après modifié des éléments de la structure afin de modifier l'icône ou le texte de l'infobulle etc...
Voilà, je vous souhaite bonne prog et @+
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Icone dans le system tray [ par Cpphewie ]
Bonjour, je cherche désespérement comment faire une icone dans le systray ( en c sous gtk+2 de preference ). J'ai lu dans la reference gtk
Tray Icon, comment ca fonctionne ?? [ par zadounet ]
Quelqu'un sait par hasard comment programmer en Vc++ 6.0 pour faire une icone dans la bar (Tray Mode) et pour faire changer cette icone. Un peu comme
ressources, aide pour menu pour icone dans la systray [ par leprov ]
salut a tous.voila j'aimerais savoir si avec l'editeur de ressources de visual c++, il est possible de faire changer un titre dans le menu qu'on crée
WM_TRAY_ICONE [ par deck_bsd ]
Bonjour à tous,Voila j'ai réussi à afficher et retirer un icone dans la systray. Maintenant je voudrai que lorsque je clique sur l'icone la fenêtre di
Simuler un doubleclik depuis Windev sur un icone du systray ? [ par nascimo ]
Bonjour, je n'arrive pas à simuler un doubleclik sur un iconne du systray depuis Windev ...Je récupére bien le handle de la fenêtre mais la commande s
Pb avec menu d'un systray [ par myckie ]
bonjour j'ai coder un bouton sur mon programme afin qu'il mette une icone dans la barre de tray ( a coté de l'heure) a cette icone j'y ai ajouter un m
Progression en Qt4 dans le systray - Faire une icone dynamique [ par alphaone ]
Bonjour, je voudrai pouvoir afficher une progression dans le systray à coté de l'heure en Qt, avec une icône qui ce dégrise au fur et à mesure et indi
retirer l'icone systray d'une app externe [ par devloop2 ]
Bonjour à tous !(c'est mon premier post ici ;) )d'abord j'espère ne pas me tromper de section...Voilà j'utilise un logiciel qui met son icone dans la
Comment mettre l'icone de son choix sur un EXE? [ par supergrey ]
Bonjour, je voudrais savoir comment mettre une icone choisie dans un dossier, sur un .EXE (qui n'est pas le programme)Merci.
interraction windows systray [ par leprov ]
salut a tous.bon voici mon probleme. je voudrais faire un programme qui effectue un traitement au demarrage de session, puis un autre en fermeture de
|
Derniers Blogs
TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|