Références et codes exemples dans BMPSKIN.DPR de PMP1.7
Une fois n'est pas coutume, ce tut va être court, car
tous les détails de programations relatifs à la programmation
multitâche sous Win sont discutés dans un autre turoriel.
Le systray, c'est cet espèce de pseudo barre de tâche se trouvant
à droite de la vraie bare des tâches, donc les petites icônes qui
se trouvent juste à gauche de l'heure. Ce texte va vous apprendre
à en placer et à faire réagir votre programme en fonction de ce
qui lui arrive : déplacement de la souris, clickage, double-clickage,
etc...
Vous allez avoir besoin d'une et une seule Api, se trouvant dans
shell32.dll, du doux nom de Shell_NotifyIcon (et comme nous utilisons
sa version Ascii, Shell_NotifyIconA)
Nous aurons besoin d'une petite structure et de quelques constantes,
les voici en vrac, on continue après :
Type
TNid=Record
cbSize:LongWord;
hWnd:Hwnd;
uID:LongWord;
uFlags:LongWord;
uCallbackMessage:LongWord;
Icon:HIcon;
Tip:Array[1..64] Of Char;
End;
PNid=^TNid;
Const Nim_Add=0;
Nim_Delete=2;
Nim_Modify=1;
Nif_Icon=2;
Nif_Message=1;
Nif_Tip=4;
Var Nid:TNid;
Function Shell_NotifyIcon(Id:LongWord;Nid:PNid):Boolean;StdCall
External 'shell32.dll' Name 'Shell_NotifyIconA';
| l |
Trois actions sont envisageables avec cette api, trois actions
reprises par les trois constantes Nim_, donc add, delete et modify.
Cet ordre s'envoie dans le paramètre Id de l'Api, Nid étant un
pointer vers une variable de type TNid, qui contient les détails
de nos instructions.
- >Nid.cbSize contient la taille de la structure TNid=SizeOf(TNid)
- Nid.hWnd est le handle de la fenêtre responsable de la maintenance de cette icône
dans le systray : Form1.Handle par exemple
- Nid.uID est un "nom" que vous donnez à votre icône dans le systray, pour pouvoir
la modifier et la supprimer, vous devrez redonner le même nom que vous
avez entré à la création.
- Nid.uFlags vous permet de définir ce que vous envoyez réelement comme information.
Par exemple, vous voulez peut-être ne modifier que le titre et non pas
l'icône, vous ne mettrez que Nif_Tip et pas les autres. Ce sont des flags,
donc des valeurs qui se OR : si vous voulez tout modifier, entrez
Nif_Icon OR Nif_Message OR Nif_Tip. En fonction de ces flags, l'api
regardera ou non certains des paramètres suivants :
- Nid.uCallbackMessage est le message que le systray enverra à la fenêtre qui se
charge de la gestion de l'icône en cas d'évènement sur celui-ci.
Vous pouvez lui dire d'envoyer le message que vous voulez,
mais pour être sur de ne pas lui envoyer de messages qui
sont utilisés pour autre chose, vous pouvez lui donner la
constante WM_USER. Il s'agit d'un Nonqueued message, et pour
le gérer, patchez la fonction windows de votre fenêtre. Le
paramètre de ce message est envoyé dans lParam et sont les
mêmes que les évenements souris :
WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDBLCLK (remplacez le
L par R ou M pour les autres boutons), WM_MOUSEMOVE, il y en
a encore d'autres mes ceux-là devraient suffire.
- Nid.Icon est le handle de l'icône à afficher, par exemple Nid.Icon:=Form1.Icon.Handle
- Nid.Tip est une suite de 64 octets contenant le message à afficher (en jaune) quand
la souris reste dessus immobile pendant un laps de temps.
Bon, ça devrait suffire je trouve, mais si vous ne vous en sortez pas, n'hésitez
surtout pas à me mailer.
|