Systray + balloon en un seul contrôle utilisateur

Description

Et oui, encore une appli qui traite du SysTray, cette icône que l'on place à côté de l'horloge, dans la barre des tâches.
Mon challenge était de regrouper toute la gestion dans un objet unique, un User Control, afin de faciliter son utilisation.
La difficulté vient du fait que, à partir du moment où l'on veut faire du SubClassing, il faut utiliser l'instruction "AddressOf" qui ne peut fonctionner que dans un module.
Grace à l'astuce de EbartSoft (lien dans la source), on peut le faire n'importe où.

Cette version gère aussi les Balloons, avec des textes UniCode, donc utilisable avec n'importe quelle page de code (international)
Là encore, la difficulté, c'est que ces Ballons ne fonctionnent pas comme décrit dans la Doc de Microsoft :
- Problème de la taille de la structure :
La structure originale NOTIFYICONDATAW a un paramètre final qui sert à la définition d'une icône personnalisée dans le Balloon.
Or, la fonction API qui va avec, Shell_NotifyIconW, n'accepte pas cette longueur de structure.
Adieu, donc, la personnalisation de l'icône.
Je pense que cela ne doit pouvoir fonctionner que sous Vista (à confirmer)
- Problème de TimeOut :
La structure NOTIFYICONDATAW prévoit un paramètre dans lequel on précise le TimeOut (le temps au bout duquel le balloon doit se refermer) en millisecondes.
Or, cette technique ne fonctionne pas.
Il a donc fallu avoir recours à un Timer (API) pour gérer cette fonctionalité.

Ce contrôle utilisateur offre aussi la possibilité de faire clignoter (*) l'icône du SysTray
(*) affiche en alternance deux icônes

Conclusion :


Ce code ne peut fonctionner que sur les version Windows 2000 et supérieure.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.