Unit pour utiliser le systray simplement avec votre application(ajoute, modifie, supprime icone)

Soyez le premier à donner votre avis sur cette source.

Vue 9 305 fois - Téléchargée 890 fois

Description

Voici une petite unit, ki va vous simplifier la vie:
intégrez la a votre progs pour ajouter/modifier et supprimer une icone de votre appli dans le systray(a coté de l'horloge)

voir le zip pour un joli exemple

Source / Exemple :


unit Systray;

interface
uses
  Forms,  Messages,  ShellAPI,  Windows;
procedure EnleveIconeTray();
procedure ModifIconeTray(Texte:String;Icone:HICON);
procedure AjouteIconeTray(handle:HWND;Icone:HICON;Texte:string);

var
  IconeT:TNotifyIconData;

implementation

procedure AjouteIconeTray(handle:HWND;Icone:HICON;Texte:string);
var a:integer;
begin
IconeT.cbSize := SizeOf(IconeT); //Taille de l'icône en octet
IconeT.wnd := handle;      //Handle de l'application
IconeT.uID := 1;             //Identificateur de l'icône
IconeT.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE;
IconeT.uCallbackMessage := WM_MOUSEMOVE;     //Renvoyer les messages concernant l'action de la souris
IconeT.hIcon := Icone;   //Mettre en icône l'image qui est dans le contrôle "Image1"
//Texte de la bulle d'aide
if Length(Texte) > 64 then SetLength(Texte,64);
IconeT.szTip:='';
for a:=0 to Length(Texte)-1 do IconeT.szTip[a] := Texte[a+1];

//Appel de la fonction pour mettre l'icône dans le système tray
Shell_NotifyIcon(NIM_ADD,@IconeT);

end;

procedure EnleveIconeTray();
begin
IconeT.uID := 1;             
Shell_NotifyIcon(NIM_DELETE,@IconeT);

end;

procedure ModifIconeTray(Texte:String;Icone:HICON);
var a:integer;
begin
IconeT.uID:=1;
//Texte de la bulle d'aide
if Length(Texte) > 64 then SetLength(Texte,64);
IconeT.szTip:='';
for a:=0 to Length(Texte)-1 do IconeT.szTip[a] := Texte[a+1];

IconeT.hIcon := Icone; //Icone

Shell_NotifyIcon(NIM_MODIFY, @IconeT);  //modifie
End;

end.  

//----------------------------------------------------
//le code suivant permet d'effectuer des actions kan on klik sur l'icone:
//il est a placer dans la propriété mousemove de la form

//voici un exemple :
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
 Pos:TPoint;
begin
//action kan on clique
GetCursorPos(Pos);//positon de la souris;

Case X of
  WM_LBUTTONDBLCLK:showmessage('Vous avez double cliqué sur l'icone') ; //Double kilk gauche
  WM_LBUTTONDOWN:;  //Bouton gauche pousse
  WM_LBUTTONUP:;    //Bouton gauche lève
  WM_RBUTTONDBLCLK:; //Double kilk droit
  WM_RBUTTONDOWN:;  //Bouton droit pousse
  WM_RBUTTONUP:PopupMenu1.Popup(Pos.X,Pos.Y); //Bouton droite lève: Popup
End;

end;

Conclusion :


AjouteIconeTray :
handle->handle de la form (ex:form1.handle)
Icone->Icone qui sera affiché (ex:application.Icon.Handle)
Texte->texte qui sera affiché kan la souris passe dessus
ModifIconeTray :
Texte->Nouveau texte
Icone->nouvelle icone
EnleveIconeTray : juste appeler pour enlever l'icone

Codes Sources

A voir également

Ajouter un commentaire

Commentaire

Messages postés
214
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
14 mai 2004

ok c'est bien, simple.
Mais je voudrais que ma form s'affiche dans le systray quand on la réduit. Peux-tu m'aider ?

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.