Delphipage - la reference en Delphi
Accueil - Astuces - Composants - Programmes - Tutoriaux - Livres - Liens
 Sources
- Astuces
- Composants
- Programmes
- Tutoriaux
 Rechercher
- Delphipage
- Ngscan
 Ressources
- Lexique Delphi
- Livres
- News
- Patchs Delphi
 Liens
- Borland France
- CodeGear
- Les meilleurs sites


Tutoriaux - Tray Icons

Présentation

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".

uses ShellApi;

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;


Message de notification

"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] [Télécharger 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
;


Tray Icons avec un menu

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] [Télécharger 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] [Télécharger trayanim.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/
 

Tous droits réservés - Contacts
Haut de la page