Placer des applications Delphi dans la barre d'état système

Jetez un œil à votre barre des tâches. Voir la zone où se trouve l'heure? Y a-t-il d'autres icônes là-bas? L'endroit est appelé la barre d'état système de Windows. Souhaitez-vous y placer l'icône de votre application Delphi? Souhaitez-vous que cette icône soit animée ou reflète l'état de votre application?

Cela serait utile pour les programmes qui sont laissés en cours d'exécution pendant de longues périodes sans interaction avec l'utilisateur (les tâches d'arrière-plan que vous continuez généralement à exécuter sur votre PC toute la journée).

Ce que vous pouvez faire est de faire en sorte que vos applications Delphi se réduisent au plateau (au lieu de la barre des tâches, directement sur le bouton Win Start) en plaçant une icône dans le plateau et en rendant simultanément vos formulaires invisibles.

Tray It

Heureusement, la création d'une application qui s'exécute dans la barre d'état système est assez facile - une seule fonction (API), Shell_NotifyIcon, est nécessaire pour accomplir la tâche.

La fonction est définie dans l'unité ShellAPI et nécessite deux paramètres. Le premier est un indicateur indiquant si l'icône est ajoutée, modifiée ou supprimée, et le second est un pointeur vers une structure TNotifyIconData contenant les informations sur l'icône. Cela inclut la poignée de l'icône à afficher, le texte à afficher sous forme d'infobulle lorsque la souris survole l'icône, la poignée de la fenêtre qui recevra les messages de l'icône et le type de message que l'icône enverra à cette fenêtre..

Tout d'abord, dans la section privée de votre formulaire principal, mettez la ligne:
TrayIconData: TNotifyIconData;

type
TMainForm = classe(TForm)
procédure FormCreate (expéditeur: TObject);
privé
TrayIconData: TNotifyIconData;
Déclarations privéesPubliqueDéclarations publiquesfin;

Ensuite, dans la méthode OnCreate de votre formulaire principal, initialisez la structure de données TrayIconData et appelez la fonction Shell_NotifyIcon:

avec TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Poignée;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Application.Icon.Handle;
StrPCopy (szTip, Application.Title);
fin;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);

Le paramètre Wnd de la structure TrayIconData pointe vers la fenêtre qui reçoit les messages de notification associés à une icône. 

Le hIcon pointe vers l'icône que nous voulons ajouter au plateau - dans ce cas, l'icône principale des applications est utilisée.
Le szTip contient le texte de l'info-bulle à afficher pour l'icône - dans notre cas, le titre de l'application. Le szTip peut contenir jusqu'à 64 caractères.
Le paramètre uFlags est défini pour indiquer à l'icône de traiter les messages de l'application, d'utiliser l'icône de l'application et son conseil. Le uCallbackMessage pointe vers l'identificateur de message défini par l'application. Le système utilise l'identifiant spécifié pour les messages de notification qu'il envoie à la fenêtre identifiée par Wnd chaque fois qu'un événement de souris se produit dans le rectangle englobant de l'icône. Ce paramètre est défini sur la constante WM_ICONTRAY définie dans la section interface de l'unité de formulaires et est égale à: WM_USER + 1;

Vous ajoutez l'icône au plateau en appelant la fonction API Shell_NotifyIcon. Le premier paramètre "NIM_ADD" ajoute une icône à la zone du bac. Les deux autres valeurs possibles, NIM_DELETE et NIM_MODIFY sont utilisées pour supprimer ou modifier une icône dans la barre d'état - nous verrons comment plus loin dans cet article. Le deuxième paramètre que nous envoyons à Shell_NotifyIcon est la structure TrayIconData initialisée.

Prends-en un

Si vous exécutez votre projet maintenant, vous verrez une icône près de l'horloge dans le bac. Notez trois choses. 

1) Tout d'abord, rien ne se passe lorsque vous cliquez (ou faites quoi que ce soit d'autre avec la souris) sur l'icône placée dans la barre d'état - nous n'avons pas encore créé de procédure (gestionnaire de messages).
2) Deuxièmement, il y a un bouton sur la barre des tâches (nous ne le voulons évidemment pas ici).
3) Troisièmement, lorsque vous fermez votre application, l'icône reste dans le bac.

Prendre deux

Résolvons cela à l'envers. Pour que l'icône soit supprimée du bac lorsque vous quittez l'application, vous devez à nouveau appeler Shell_NotifyIcon, mais avec NIM_DELETE comme premier paramètre. Pour ce faire, dans le gestionnaire d'événements OnDestroy pour le formulaire principal.