Mettre son application dans le system tray lorsqu'on la minimise

Contenu du snippet

Ce code existe déja partiellement sur le site mais j'ai du passer quelques petites heures de recherche pour le faire fonctionner correctement.
Ce est décomposé en plusieurs actions
1. minimiser l'application et faire apparaitre une icone dans la barre des taches.
2. lorsqu'on doubleclique sur l'icone, l'appli se restaure et l'icone disparait.

Source / Exemple :


a coller apres le uses : 
Const WM_MYMESSAGE=WM_USER+100;
----------------------------------------------
variables globales : 
notifyStruc:TNotifyIconData;
--------------------------------------------------------
//fonction qui minimize et cache la fenetre
//declaration
procedure Minimize(Sender: TObject);
//corps de la fonction :
procedure MACLASSE.Minimize(Sender: TObject);
begin
 notifyStruc.cbSize:=SizeOf(notifyStruc);
 notifyStruc.Wnd:=Handle;
 notifyStruc.uID:=1;
 NotifyStruc.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE;
 NotifyStruc.uCallbackMessage := WM_MYMESSAGE;
 NotifyStruc.hIcon :=    WD_MAIN.Image1.Picture.Icon.Handle;//icone qui apparaitra dans le systray. composant Timage
 NotifyStruc.szTip:='le texte a afficher lorsque on passe la souris devant l'icone';
 Shell_NotifyIcon(NIM_ADD,@NotifyStruc);//ajoute la petite icône dans la barre des taches
 application.minimize;
 ShowWindow(Application.Handle, SW_HIDE);    //application invisible de la barre de tâches.
end;
----------------------------------------------------------
//fonction qui restaure l'application: (a coller dans les déclaration de fonctions de classe)
//declaration : 
procedure TrayMessage(var Msg: TMessage); message WM_MYMESSAGE;

//corps de la fonction : 

procedure MACLASSE.TrayMessage(var Msg: TMessage);
begin
 if (Msg.lparam=WM_LBUTTONDBLCLK) then //double click sur l'icone
 begin
  application.restore;
  ShowWindow(Application.Handle, SW_SHOW);
  if (@NotifyStruc<>NIL) then
   Shell_NotifyIcon(NIM_DELETE,@NotifyStruc);  // supprime la petite icône de la barre des taches

 end;
end;

A voir également

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.