Platzieren von Delphi-Anwendungen in der Taskleiste

Schauen Sie sich Ihre Taskleiste an. Sehen Sie den Bereich, in dem sich die Uhrzeit befindet? Gibt es dort noch andere Symbole? Der Ort wird als Windows-Taskleiste bezeichnet. Möchten Sie das Symbol Ihrer Delphi-Anwendung dort platzieren? Möchten Sie, dass dieses Symbol animiert wird - oder den Status Ihrer Anwendung widerspiegeln??

Dies ist nützlich für Programme, die über einen längeren Zeitraum ohne Benutzerinteraktion ausgeführt werden (Hintergrundaufgaben, die normalerweise den ganzen Tag auf Ihrem PC ausgeführt werden)..

Sie können Ihre Delphi-Anwendungen so gestalten, als würden sie in den Tray minimiert (anstatt in die Taskleiste, rechts auf die Schaltfläche "Win Start"), indem Sie ein Symbol in den Tray platzieren und gleichzeitig Ihre Formulare unsichtbar machen.

Lass es uns tun

Glücklicherweise ist das Erstellen einer Anwendung, die in der Taskleiste ausgeführt wird, ziemlich einfach - es wird nur eine (API-) Funktion, Shell_NotifyIcon, benötigt, um die Aufgabe auszuführen.

Die Funktion ist in der ShellAPI-Einheit definiert und erfordert zwei Parameter. Das erste ist ein Flag, das angibt, ob das Symbol hinzugefügt, geändert oder entfernt wird, und das zweite ist ein Zeiger auf eine TNotifyIconData-Struktur, die die Informationen über das Symbol enthält. Dazu gehören das Handle des anzuzeigenden Symbols, der Text, der als QuickInfo angezeigt wird, wenn sich die Maus über dem Symbol befindet, das Handle des Fensters, das die Nachrichten des Symbols empfängt, und der Nachrichtentyp, den das Symbol an dieses Fenster sendet.

Geben Sie zunächst im Abschnitt "Privat" Ihres Hauptformulars die folgende Zeile ein:
TrayIconData: TNotifyIconData;

Art
TMainForm = Klasse(TForm)
Verfahren FormCreate (Absender: TObject);
Privat
TrayIconData: TNotifyIconData;
Private ErklärungenÖffentlichkeitÖffentliche ErklärungenEnde;

Initialisieren Sie dann in der OnCreate-Methode Ihres Hauptformulars die TrayIconData-Datenstruktur und rufen Sie die Shell_NotifyIcon-Funktion auf:

mit TrayIconData Dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Handle;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Application.Icon.Handle;
StrPCopy (szTip, Application.Title);
Ende;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);

Der Parameter Wnd der TrayIconData-Struktur verweist auf das Fenster, in dem mit einem Symbol verknüpfte Benachrichtigungsnachrichten angezeigt werden. 

Das Symbol zeigt auf das Symbol, das wir dem Tray hinzufügen möchten. In diesem Fall wird das Hauptsymbol für Anwendungen verwendet.
Das szTip enthält den Tooltip-Text für das Symbol - in unserem Fall den Titel der Anwendung. Das szTip kann bis zu 64 Zeichen enthalten.
Der Parameter uFlags weist das Symbol an, Anwendungsnachrichten zu verarbeiten, das Anwendungssymbol und dessen Tipp zu verwenden. Die uCallbackMessage zeigt auf die anwendungsdefinierte Nachrichten-ID. Das System verwendet den angegebenen Bezeichner für Benachrichtigungsnachrichten, die an das von Wnd angegebene Fenster gesendet werden, wenn ein Mausereignis im Begrenzungsrechteck des Symbols auftritt. Dieser Parameter wird auf die im Schnittstellenabschnitt der Formulareinheit definierte Konstante WM_ICONTRAY gesetzt und ist gleich: WM_USER + 1;

Sie fügen das Symbol dem Tray hinzu, indem Sie die Shell_NotifyIcon-API-Funktion aufrufen. Der erste Parameter "NIM_ADD" fügt dem Tray-Bereich ein Symbol hinzu. Die beiden anderen möglichen Werte, NIM_DELETE und NIM_MODIFY, werden zum Löschen oder Ändern eines Symbols in der Taskleiste verwendet. Weitere Informationen finden Sie weiter unten in diesem Artikel. Der zweite Parameter, den wir an Shell_NotifyIcon senden, ist die initialisierte TrayIconData-Struktur.

Nehmen Sie eine

Wenn Sie Ihr Projekt jetzt ausführen, wird in der Taskleiste neben der Uhr ein Symbol angezeigt. Beachten Sie drei Dinge. 

1) Erstens passiert nichts, wenn Sie auf das Symbol in der Taskleiste klicken (oder etwas anderes mit der Maus tun) - wir haben noch keine Prozedur (Message-Handler) erstellt.
2) Zweitens gibt es eine Schaltfläche in der Taskleiste (wir wollen es offensichtlich nicht dort).
3) Drittens verbleibt das Symbol in der Taskleiste, wenn Sie Ihre Anwendung schließen.

Nimm zwei

Lösen wir das rückwärts. Damit das Symbol beim Beenden der Anwendung aus der Taskleiste entfernt wird, müssen Sie Shell_NotifyIcon erneut aufrufen, jedoch mit NIM_DELETE als erstem Parameter. Sie tun dies im OnDestroy-Ereignishandler für das Hauptformular.