![]() |
![]() |
![]() |
|
![]() |
![]() |
![]() |
Utilisation de la classe NotifyIcon dans Delphi 8Date de publication : 16/02/2004 , Date de mise a jour : 16/02/2004
Par
Nono40 (nono40.developpez.com) Ce document présente l'utilisation du composant Winform NotifyIcon dans une application Delphi.NET. Cette présentation sera appliquée aux applications Winform et VCL.NET. Introduction I. Principes communs I-A. Classe NotifyIcon I-B. Utilisation de l'icône. II. Utilisation dans une application Winform II-A. Mise en place des composants II-B. Ajout du code en réponse aux événements II-C. Exécution III. Utilisation dans une application VCL.NET III-A. Création d'une instance de le classe NotifyIcon III-B. Ajout des autres composants III-C. Ajout du code en réponse aux événements III-D. Exécution Conclusion Introduction
La classe NotifyIcon de l'assembly System.Windows.Forms permet de gérer très simplement une
icône dans le systray. Elle remplace la fonction API Win32 Shell_NotifyIcon en proposant
une solution sous forme de composant.
Cet article va présenter son utilisation dans Delphi.NET pour des applications Winform et
VCL.NET au travers d'une application simple.
I. Principes communsI-A. Classe NotifyIcon
Le composant Winform NotifyIcon permet une gestion simple d'une icône dans la barre des
tâches. La gestion de l'affichage est simplement effectuée par la mise à jour des propriétés :
Pour la gestion des actions de l'utilisateur le composant possède des événements :
I-B. Utilisation de l'icône.
Le programme d'exemple décrit plus loin va présenter les fonctions habituelles d'une icône dans le
systray :
Le click droit va afficher le menu contexte contextuel contenant les options restaurer, réduire et fermer.
Le double clic va restaurer la fenêtre de l'application.
Le click gauche, non suivi d'un double clic affichera le menu contextuel.
La différentiation entre un click simple et le premier click d'un double click sera
effectuée à l'aide d'un Timer. L'affichage du menu dans le cas d'un simple click gauche
est retardé d'une demi-seconde pour attendre le deuxième click éventuel du double click.
II. Utilisation dans une application WinformII-A. Mise en place des composants
Créer une nouvelle application Winform, et placer sur la fenêtre un composant NotifyIcon,
un composant ContextMenu et un composant Timer. Tous ces composants sont inclus dans
la palette "components".
Notez que dans le cas d'un fiche Winform les composants visuels ne sont pas dessinés sur
la fiche mais placés dans un bandeau en dessous. Il suffit ensuite de cliquer sur le composant
voulu pour en modifier les propriétés.
Cliquer sur le composant NotifyIcon1 et ajuster les propriété voulues. Pour que l'icône soit
affichée il faut ajouter une icône au composant ( ce qui est fait très simplement par le bouton
'...' ) et mettre sa propriété visible à True.
![]()
Remplir de même les propriétés Text et ContextMenu en sélectionnant ContextMenu1.
Renseigner ensuite le menu contextuel, ceci est réalisé en cliquant sur le composant dans
le bas pour faire appaitre un debut de menu dans la fiche. Il faut alors remplir les éléments de
menu comme pour une application VCL classique.
![]()
Remarque : renommer les éléments de menu avant d'y associer des événements. Car le nom
des événements n'est pas modifié automatiquement ensuite. Il est tout de même possible de les
changer manuellement.
Renseigner enfin les propriétés du timer : interval =500 et enabled à False.
II-B. Ajout du code en réponse aux événements
En premier lieu renseigner les événements du menu contextuel :
Renseigner ensuite l'événement MouseDown du NotifyIcon1 :
Notez que la structure des événements dans les objets .NET est toujours sur le même modèle. Deux
objets sont passés en paramètres, le premier ( Sender ) est l'objet ayant reçu/provoqué l'événement.
Le deuxième ( e ) contient des informations complémentaire. La classe de e dépend du type
d'événement. Dans le cas ci-dessus, e est de type MouseEventArgs. Les propriétés de cette classe permettent de différencier le type de bouton et le style d'appui. Il n'y a pas de propriété DoubleClick ou de type de bouton DoubleClick comme dans les événements VCL. Ici, c'est le nombre de click qu'il faut comparer.
Le bouton droit ne sera pas testé, car le menu contextuel est géré automatiquement par le
composant lors du click droit.
Ajouter ensuite le code pour le double click :
Et enfin celui de l'événement Tick du Timer :
II-C. Exécution
L'application est maintenant prête à être essayée.
Le source complet de cet exemple en disponible ici :
Source0078
III. Utilisation dans une application VCL.NET
Dans le une applicaton VCL.NET le composant NotifyIcon ne peut pas être utilisé visuellement.
L'instance sera donc créée et gérée dynamiquement.
III-A. Création d'une instance de le classe NotifyIcon
Pour pouvoir utiliser le composant NotifyIcon le projet à besoin de référencer l'assemblage
qui le contient : System.Windows.Forms.dll . Il faudra aussi référencer System.Drawing.dll afin
de pouvoir créer une instance de la classe System.Drawing.Icon.
Pour ajouter une référence aller dans le menu Project puis sélectionner Add référence...
![]()
Ajouter les références pour System.Windows.Forms.dll,System.Drawing.dll.
Il faut ensuite ajouter dans le uses les assembly référencées :
Ajouter ensuite la déclaration dans Form1 manuellement comme habituellement pour la création
dynamique d'une composant. Il faut aussi ajouter les méthodes qui seront ajoutés aux événements.
La création du composant sera effectuée dans l'événement OnCreate de la fiche. Pour créer
un composant Winform il faut procéder comme les composants VCL, en appelant son constructeur.
Notez dans le code ci-dessus la différence importante pour la création du lien entre les
méthodes de la fiche et les événements du composant. Il ne faut plus mettre à jour
l'adresse de l'événement en associant la méthode à l'événement mais il faut utiliser
la fonction Include qui ajoute un gestionnaire d'événement dans la liste des gestionnaires.
Notez aussi que nous n'utiliserons pas NotifyIcon.ContextMenu, car il faudrait aussi créer
un menu contextuel WinForm, alors qu'il est plus simple ici d'utiliser un menu contextuel VCL. La
seule chose qu'il faudra effectuer en plus est l'affichage lors du click droit.
L'icône affichée ici est celle du fichier exécutable récupérée par la procédure ExtractIcon. Il
est possible aussi d'utiliser un fichier séparé ou un TImage pour stocker l'icône. Dans ces deux
cas le code de création de NotifyIcon1.Icon est le suivant :
Ne pas oublier de détruire l'instance à la destruction de la fiche :
III-B. Ajout des autres composants
Ajouter ensuite sur la fiche un PopupMenu et un Timer.
Sur le PopupMenu définir trois éléments : "Restaurer", "réduire" et "Fermer".
Sur le Timer fixer son Interval à 500 et mettre Enabled à False.
III-C. Ajout du code en réponse aux événements
En premier lieu renseigner les événements du menu contextuel :
Renseigner ensuite les gestionnaires d'événements liés au NotifyIcon :
Renseigner enfin l'événement Timer du Timer :
III-D. Exécution
L'application est maintenant prête à être essayée.
Le source complet de cet exemple en disponible ici :
Source0079
Conclusion
L'utilisation d'une icône dans la barre des tâches est donc devenue plus facile qu'en utilisant
les fonctions API dans un application Win32.
Version PDF de cet article : Miroir 1 : Version PDF Dans le cas où le miroir 1 ne fonctionne pas : Miroir 2 : Version PDF
Merci à Pierre Castelain pour la correction orthographique.
|
Les sources présentées sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2004 Bruno Guérangé. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.