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