|
Tray Icons est le nom utilisé pour désigner la barre des
tâches et les sources résidents en mémoire.
Le principe d'un programme résident est d'être chargé
en mémoire sans que quiconque s'en aperçoit.
La Tray Icons est une petite fenêtre situé dans la barre
des tâches de Windows, comportant des icônes relatives à
des applications.
A noté, qu'une application
résidente en mémoire n'est visible que lorsqu'elle en
a envie.
La Tray Icons posséde des évènements, par exemple
lorsque l'utilisateur clic ou double-clic.
L'application résidente est alors alerté pour chaque action
se produisant sur son icone. La barre des tâches lui envoie alors
un message de notification. Cette valeur est définie par l'application
résidente lors de son enregistrement. L'application
doit alors réagir en conséquence (ouverture d'un menu
surgissant, ...). Pour connaitre l'action effectuer sur son icone, il
suffit de lire la valeur du paramètre "1Param" du message.
Enregistrement
d'un programme résident |
Toutes les applications peuvent se trouver
dans la Tray Icons, il faut juste l'enregister.
On utilise pour cela l'unité ShellApi et plus précisemment
la routine "Shell_Notification".
Il faut également
ajouter TNotifyIconData.
var
Form1: TForm1;
Tray:TNotifyIconData; |
|
La routine "Shell_NotificationIcon"
prend en paramètre une structure de type TNotifyIcon.
Pour mieux comprendre ce code, voici
la structure de TNotifyIcon :
Champ
|
Description
|
cbsize |
Taille en mémoire
de la structure TNotifyIcon. |
Wnd |
Fenêtre de
l'application résidente qui gère le message du Champ
uCallbackMessage. |
uID |
Identificateur du
programme résident. |
uFlags |
Indique les évènements
qui avertissent l'application(nif_Message, nif_Icon , nif_Tip) |
uCallbackMessage |
Valeur constante
que la barre des taches enverra à l'application si l'icone
est sollicité. |
hIcon |
Handle de l'icone
de l'application. |
szTip |
Message qui doit
apparaitre quan le curseur de souris reste sur l'icone. |
Voici comment faire pour enregistrer
un programme dans la tray icons :
procedure
TForm1.FormCreate(Sender: TObject);
begin
Tray.cbSize:=SizeOf(Tray);
Tray.wnd:=Handle;
Tray.uID:=1;
Tray.UCallbackMessage:=wm_AppelMessage; Tray.hIcon:=Application.Icon.handle;
//Choix de l'icone
Tray.szTip:='Cliquez pour quitter'; //Choix
du message
Tray.uFlags:=nif_message or nif_icon or nif_tip;
Shell_NotifyIcon(Nim_ADD,@Tray);
end; |
|
"wm_CallbackMessage" est
une valeur choisie pour le message qui avertit votre application qu'une
action est effectué sur votre icone.
const
wm_AppelMessage=wm_user+1; |
|
Lorsqu'un évènement survient sur l'icone d'un programme
résident, la barre des taches envoie le message de notification
grâce à la fonction PostMessage et met dans le paramètre
LParam la constante de l'évènement.
procedure
TForm1.WMAppelMessage(var msg : TMessage);
begin
//Clique droit de la souris
if msg.LParam=Wm_LButtonDown then
Close; //Quitte l'application
end; |
|
Action
|
Description
|
WM_RButtonDown |
Bouton
droit de la souris (menu contextuel). |
WM_LButtonDblClk |
Double
clique gauche de la souris (Programme visible). |
WM_LButtonDown |
Bouton
gauche de la souris. |
WM_MouseMove |
Souris
en mouvement sur l'icone. |
Il faut maintenant
déclarer cette procedure.
private
{ Déclarations privées }
procedure WMAppelMessage(var msg : TMessage);
message wm_AppelMessage; |
|
Cacher
l'application résidente |
Il faut modifier le source du projet.
Cliquez dans le menu "Projet" de Delphi puis sur "Voir
le source".
program
Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.ShowMainForm:=False; //Cache
l'application
Application.CreateForm(TForm1, Form1);
Application.Run;
end. |
|
Fermeture
d'une application résidente |
La fermeture d'une application résidente
en mémoire consiste à terminer l'exécution du programme.
Le système enlèvera l'icone de la Tray Icons.
procedure
TForm1.FormClose(Sender : TObject; var Action : TCloseAction);
begin
Shell_NotifyIcon(Nim_DELETE,@tray); //Supprime
la tray icons
end; |
|
"Shell_NotifyIcon" est une
fonction de la structure TNotifyIconData qui a pour paramètre
"Nim_Delete".
Tray Icons |
[ 11-05-2002 ] |
Mettre
une icône dans la Tray Icons de Windows.
Télécharger : [5
Ko] [
tray.zip]
Auteur : Yoann
Site internet : http://delphipage.free.fr/
|
|
Tray
Icons au démarrage de Windows |
Si vous souhaitez que votre programme
soit chargé à chaque démarrage, il faut le spécifier
grace a la base de registre à la clé suivante :
HKey_Local_Machine\Software\Microsoft\Windows\
CurrentVersion\Run |
|
Tous les sources qui sont dans cette
clé sont toujours éxecuter au démarrage de Windows.
Pour insérez votre programme dans ce noeud, vous pouvez utiliser
ce code :
Uses
Registry;
procedure EnregistetrayIcons(nom, chemin : string);
Var Registre : TRegistry;
begin
//Récupère l'url de
la page de démarrage
Registre:=TRegistry.Create; //Crée
un objet TRegistry
Registre.RootKey:=HKEY_LOCAL_MACHINE; //Définit
la clé principale
Registre.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run',True);
Registre.WriteString(nom, chemin);
//Ecrit dans la base de registres
Registre.CloseKey; //Ferme la
clé
Registre.Free; //Détruit
l'objet
end; |
|
Pour afficher un menu, on
utilise le composant TPopupMenu.
procedure
TForm1.WMAppelMessage(var msg : TMessage);
Var Curs:TPoint;
begin
//Clique gauche de la souris
if msg.LParam=Wm_RButtonDown then
begin
SetForegroundWindow(Handle);
GetCursorPos(Curs); //Récupère
les coordonnées de la souris
PopupMenu1.Popup(Curs.X,Curs.Y); //Ouvre
le menu surgissant à l'emplacement spécfié
par les coordonnees de la souris
PostMessage(Handle,WM_NULL,0,0);
end;
end; |
|
"SetForeground"
et "PostMessage" servent, ici à faire disparaire le
menu surgissant lorsque l'utilsateur clique autre part que dans le menu.
Tray Icons avec Menu |
[ 03-10-2004 ] |
Insérer
un menu dans votre programme lorsque celui-ci se trouve
dans la Tray Icons de Windows.
Télécharger : [6
Ko] [
traymenu.zip]
Auteur : Yoann
Site internet : http://delphipage.free.fr/
|
|
Animer
l'icône du Tray Icons |
Pour animer l'icône,
il suffit juste de modifier l'icône. Pour cela, on utilisera les
composants TTimer et TImageList (qui contiendra deux icônes).
Pour alterner, on utilisera aussi une variable "i" de type
entier que l'on initialise à "0".
procedure
TForm1.Timer1Timer(Sender: TObject);
var Icon: TIcon;
begin
Inc(i); //Incremente la variable i
if i=2 then i:=0; //Alterne
0 et 1 (pour le choix de l'icône)
Icon:=TIcon.Create;
try
ImageList1.GetIcon(i,Icon); //Choix
de l'icone
tray.hIcon:=Icon.Handle;
Shell_NotifyIcon(Nim_Modify,@tray); //Modife
l'icône du Tray Icons
finally
Icon.Free;
end;
end; |
|
Tray Icons avec animation |
[ 03-10-2004 ] |
Animer
l'îcone du Tray Icons.
Télécharger : [7
Ko] [
trayanim.zip]
Auteur : Yoann
Site internet : http://delphipage.free.fr/
|
|
|