Procedure TForm1.FormCreate(Sender: TObject); Var Small,Large:IntPtr; Begin // L'instance de la classe NotifyIcon doit être créée dynamiquement // car les composants WinForm ne peuvent être déposés sur des fiches // VCLForm.
NotifyIcon1:=System.Windows.Forms.NotifyIcon.Create;
NotifyIcon1.Text:='Nono40 - Source 79';
// Si l'icone est celle de l'exécutable
ExtractIco(Forms.Application.ExeName,0,Large,Small,1);
NotifyIcon1.Icon:=System.Drawing.Icon.FromHandle(Large);
// Si l'icône est lue dans un fichier placé à coté de l'exécutable // NotifyIcon1.Icon:=System.Drawing.Icon.Create('Nono.ico');
// Si l'icone est stockée dans un TImage sur la fiche // Ico:=IntPtr.Create(Image1.Picture.Icon.Handle); // NotifyIcon1.Icon:=System.Drawing.Icon.FromHandle(Ico);
// Association des méthodes aux évènements correspondants. Notez ici // la différence importante avec Delphi 7. Les évènements sont ajoutés // dans la liste des évènements. Ce n'est plus une simple affectation // d'adresse de méthode.
Include(NotifyIcon1.DoubleClick,NotifyIcon1_DoubleClick);
Include(NotifyIcon1.MouseDown ,NotifyIcon1_MouseDown); // L'icône est affichée dans la barre de stâches
NotifyIcon1.Visible:=True;
DoitFermer := False; End;
Procedure TForm1.FormDestroy(Sender: TObject); Begin // L'instanc est créée sans propriétaire, donc ne pas // oublier de détruire l'instance.
NotifyIcon1.Free; End;
Procedure TForm1.MenuReduireClick(Sender: TObject); Begin // L'option réduire permet de ... réduire la fenêtre !
WindowState:=wsMinimized; End;
Procedure TForm1.MenuRestaurerClick(Sender: TObject); Begin // L'option restaurer permet de ... restaurer la fenêtre !
WindowState:=wsNormal; End;
Procedure TForm1.MenuFermerClick(Sender: TObject); Begin // Il faut autoriser la feremeture cette fois-ci
DoitFermer:=True; // et fermer la fenêtre
Close End;
Procedure TForm1.FormCloseQuery(Sender: TObject; Var CanClose: Boolean); Begin // On teste si la fermeture de la fenêtre doit être effective IfNot DoitFermer Then Begin // Dans le cas contraire, on se contente de réduire l'application
CanClose:=False;
WindowState:=wsMinimized; End; End;
Procedure TForm1.NotifyIcon1_MouseDown(sender: TObject;
e: System.Windows.Forms.MouseEventArgs); Begin // Dans le cas d'un click gauche, on lance le timer pour // différencier le click, d'un double-click. If e.Button=System.Windows.Forms.MouseButtons.Left Then
Timer1.Enabled:=True; // Dans le cas d'un click droit on affiche le menu. Le menu // contextuel ne peut pas être associé directement au NotifyIcon // car c'est un menu VCL et non WinForm. C'est pour cela qu'il // est affiché manuellement. If e.Button=System.Windows.Forms.MouseButtons.Right Then
PopUpMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y); End;
Procedure TForm1.NotifyIcon1_DoubleClick(sender: TObject;
e: System.EventArgs); Begin // Dans le cas d'un double-click, on arrête le timer lancé par le premier // click et on effectue l'action par défaut.
Timer1.Enabled:=False;
MenuRestaurerClick(Nil); End;
Procedure TForm1.Timer1Timer(Sender: TObject); Begin // Si le timer s'est écoulé, c'est qu'il n'y a pas eu de double-click. // Dans ce cas on affiche le menu là ou est la souris.
Timer1.Enabled:=False;
PopUpMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y); End;