Schauen Sie sich Ihre Taskleiste an. Sehen Sie den Bereich, in dem sich die Zeit befindet? Gibt es dort noch andere Symbole? Der Ort wird als Windows-Taskleiste bezeichnet. Möchten Sie Ihre platzieren Delphi Anwendungssymbol dort? Möchten Sie, dass dieses Symbol animiert wird - oder den Status Ihrer Anwendung widerspiegelt?
Dies ist nützlich für Programme, die über einen längeren Zeitraum ohne Benutzerinteraktion ausgeführt werden (Hintergrundaufgaben, die Sie normalerweise den ganzen Tag auf Ihrem PC ausführen).
Was Sie tun können, ist, Ihre Delphi-Anwendungen so aussehen zu lassen, als würden sie auf das Fach (anstatt auf das Fach) minimiert Taskleiste (rechts neben der Schaltfläche "Win Start"), indem Sie ein Symbol in die Taskleiste legen und gleichzeitig Ihre Formulare erstellen. unsichtbar.
Lassen Sie es uns Tray
Glücklicherweise ist das Erstellen einer Anwendung, die in der Taskleiste ausgeführt wird, ziemlich einfach - nur eine API-Funktion (Shell_NotifyIcon) ist erforderlich, um die Aufgabe auszuführen.
Die Funktion ist in der definiert ShellAPI-Einheit 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 zum Symbol enthält. Dazu gehört der Griff des anzuzeigenden Symbols, der Text, der als QuickInfo angezeigt werden soll, wenn sich die Maus über dem Symbol befindet Handle des Fensters, in dem die Nachrichten des Symbols empfangen werden, und der Nachrichtentyp, den das Symbol an dieses sendet Fenster.
Geben Sie zunächst im privaten Bereich 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ärungen}Ende;
Dann in Ihrer Hauptform OnCreate Methode, initialisieren Sie die TrayIconData-Datenstruktur und rufen Sie die Shell_NotifyIcon-Funktion auf:
mit TrayIconData Dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Griff;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Anwendung. Symbol. Griff;
StrPCopy (szTip, Anwendung. Titel);
Ende;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);
Der Parameter Wnd der TrayIconData-Struktur zeigt auf das Fenster, in dem Benachrichtigungsnachrichten empfangen werden, die einem Symbol zugeordnet sind.
Das Symbol zeigt auf das Symbol, das wir der Taskleiste hinzufügen möchten. In diesem Fall wird das Hauptsymbol der Anwendung verwendet.
Die szTip enthält den Tooltip-Text, der für das Symbol angezeigt werden soll - in unserem Fall den Titel der Anwendung. Der szTip kann bis zu 64 Zeichen enthalten.
Der Parameter uFlags wird festgelegt, um das Symbol anzuweisen, Anwendungsnachrichten zu verarbeiten, das Anwendungssymbol und seinen Tipp zu verwenden. Das uCallbackMessage zeigt auf die anwendungsdefinierte Nachrichtenkennung. Das System verwendet die angegebene Kennung für Benachrichtigungsnachrichten, die es an das von Wnd angegebene Fenster sendet, 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 zur Taskleiste hinzu, indem Sie die API-Funktion Shell_NotifyIcon aufrufen. Der erste Parameter "NIM_ADD" fügt dem Fachbereich 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. Wir werden später in diesem Artikel sehen, wie. 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 neben der Uhr in der Taskleiste 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 (Nachrichtenhandler) erstellt.
2) Zweitens gibt es eine Schaltfläche in der Taskleiste (wir wollen sie dort offensichtlich nicht).
3) Drittens bleibt das Symbol beim Schließen Ihrer Anwendung in der Taskleiste.
Nimm zwei
Lösen wir das rückwärts. Um das Symbol beim Beenden der Anwendung aus der Taskleiste zu entfernen, müssen Sie das Shell_NotifyIcon erneut aufrufen, jedoch mit NIM_DELETE als erstem Parameter. Sie tun dies im OnDestroy Event-Handler für das Hauptformular.
Verfahren TMainForm. FormDestroy (Absender: TObject);
Start
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
Ende;
Um die Anwendung (die Schaltfläche der Anwendung) in der Taskleiste auszublenden, verwenden wir einen einfachen Trick. Fügen Sie im Quellcode von Projects die folgende Zeile hinzu: Application. ShowMainForm: = False; vor der Bewerbung. CreateForm (TMainForm, MainForm); Zum Beispiel lassen Sie es so aussehen:
...
Start
Anwendung. Initialisieren;
Anwendung. ShowMainForm: = False;
Anwendung. CreateForm (TMainForm, MainForm);
Anwendung. Lauf;
Ende.
Damit unser Tray-Symbol auf Mausereignisse reagiert, müssen Sie ein Verfahren zur Nachrichtenverarbeitung erstellen. Zunächst deklarieren wir im öffentlichen Teil der Formulardeklaration eine Nachrichtenbehandlungsprozedur: procedure TrayMessage (var Msg: TMessage); Nachricht WM_ICONTRAY; Zweitens sieht die Definition dieses Verfahrens folgendermaßen aus:
Verfahren TMainForm. TrayMessage (var Nachricht: TMessage);
Begincase Msg.lParam von
WM_LBUTTONDOWN:
Start
ShowMessage ('Linke Schaltfläche angeklickt
- Lass uns die Form zeigen! ');
Hauptform. Show;
Ende;
WM_RBUTTONDOWN:
Start
ShowMessage ('Rechtsklick angeklickt
- Lass uns das Formular verstecken! ');
Hauptform. Ausblenden;
Ende;
Ende;
Ende;
Diese Prozedur ist nur für die Verarbeitung unserer Nachricht WM_ICONTRAY vorgesehen. Es nimmt den LParam-Wert aus der Nachrichtenstruktur, die uns bei Aktivierung der Prozedur den Status der Maus anzeigen kann. Der Einfachheit halber werden nur die linke Maustaste (WM_LBUTTONDOWN) und die rechte Maustaste (WM_RBUTTONDOWN) behandelt. Wenn die linke Maustaste auf dem Symbol gedrückt ist, wird das Hauptformular angezeigt. Wenn die rechte Taste gedrückt wird, wird es ausgeblendet. Natürlich gibt es andere Mauseingabemeldungen, die Sie in der Prozedur verarbeiten können, wie z. B. Schaltfläche nach oben, Doppelklick auf die Schaltfläche usw.
Das ist es. Schnell und einfach. Als Nächstes erfahren Sie, wie Sie das Symbol in der Taskleiste animieren und wie dieses Symbol den Status Ihrer Anwendung widerspiegelt. Außerdem sehen Sie, wie Sie ein Popup-Menü neben dem Symbol anzeigen.