Aplicație Delphi Tray System

Aruncați o privire la bara de activități. Vedeți zona în care se află ora? Există alte icoane acolo? Locul se numește Windows System Tray. Ați dori să vă plasați Delphi pictograma aplicației acolo? Doriți ca această pictogramă să fie animată - sau să reflecte starea aplicației dvs.?

Acest lucru ar fi util pentru programele rămase în funcțiune pentru perioade îndelungate de timp, fără interacțiune cu utilizatorii (activități de fundal pe care de obicei le continuați să funcționați pe computer toată ziua).

Ce puteți face este să faceți ca aplicațiile dvs. Delphi să pară ca și cum ar reduce minim tava Bara de activități, dreapta la butonul Win Start), introducând o pictogramă în tavă și creând simultan formularul dvs. invizibil.

Hai să-l tăvălim

Din fericire, crearea unei aplicații care rulează în tava de sistem este destul de ușoară - este necesară o singură funcție (API), Shell_NotifyIcon, pentru a îndeplini sarcina.

Funcția este definită în Unitatea ShellAPI și necesită doi parametri. Primul este un steag care indică dacă pictograma este adăugată, modificată sau eliminată, iar al doilea este un indicator către o structură TNotifyIconData care conține informațiile despre pictogramă. Aceasta include mânerul pictogramei de afișat, textul care trebuie afișat ca un vârf de instrument atunci când mouse-ul este peste pictograma, mânerul ferestrei care va primi mesajele pictogramei și tipul de mesaj pe care îl va trimite pictograma fereastră.

instagram viewer

În primul rând, în secțiunea Privată a formularului principal, puneți linia:
TrayIconData: TNotifyIconData;

tip
TMainForm = clasă(TForm)
procedură FormCreate (Expeditor: TObject);
privat
TrayIconData: TNotifyIconData;
{Declarații private}public{Declarații publice}Sfârșit;

Apoi, în forma dvs. principală OnCreate metoda, inițializează structura de date TrayIconData și apelează funcția Shell_NotifyIcon:

cu TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = mâner;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Aplicație. Icon. Mâner;
StrPCopy (szTip, Aplicație. Titlu);
Sfârșit;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);

Parametrul Wnd al structurii TrayIconData indică fereastra care primește mesaje de notificare asociate cu o pictogramă.

HIcon indică pictograma pe care vrem să o adăugăm în tavă - în acest caz, este utilizată pictograma principală a aplicațiilor.
SzTip deține textul Tooltip pentru a fi afișat pentru pictogramă - în cazul nostru titlul aplicației. SzTip poate reține până la 64 de caractere.
Parametrul uFlags este setat să spună pictogramei să proceseze mesajele aplicației, să utilizeze pictograma aplicației și vârful acesteia. uCallbackMessage indică identificatorul de mesaj definit de aplicație. Sistemul folosește identificatorul specificat pentru mesajele de notificare pe care le trimite ferestrei identificate de Wnd de fiecare dată când se produce un eveniment de mouse în dreptunghiul de delimitare al pictogramei. Acest parametru este setat la constanta WM_ICONTRAY definită în secțiunea de interfață a unității formulare și este egală cu: WM_USER + 1;

Adăugați pictograma în tavă apelând funcția API Shell_NotifyIcon. Primul parametru „NIM_ADD” adaugă o pictogramă în zona tăvii. Celelalte două valori posibile, NIM_DELETE și NIM_MODIFY sunt folosite pentru a șterge sau a modifica o pictogramă din Tava - vom vedea cum mai târziu în acest articol. Al doilea parametru pe care îl trimitem la Shell_NotifyIcon este structura inițializată TrayIconData.

Ia o

Dacă executați proiectul dvs. acum veți vedea o pictogramă lângă ceasul din tavă. Notează trei lucruri.

1) În primul rând, nu se întâmplă nimic atunci când faceți clic pe (sau faceți altceva cu mouse-ul) pe pictograma plasată în Tava - nu am creat încă o procedură (manipulator de mesaje).
2) În al doilea rând, există un buton pe bara de activități (evident că nu vrem acest lucru acolo).
3) În al treilea rând, când închideți aplicația, pictograma rămâne în tavă.

Ia doua

Să rezolvăm acest lucru înapoi. Pentru a elimina pictograma din tavă când ieșiți din aplicație, trebuie să apelați din nou la Shell_NotifyIcon, dar cu NIM_DELETE ca prim parametru. Faceți acest lucru în OnDestroy organizatorul evenimentului pentru forma principală.

procedură Template. FormDestroy (Expeditor: TObject);
începe
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
Sfârșit;

Pentru a ascunde aplicația (butonul aplicației) din bara de activități, vom folosi un truc simplu. În codul sursă al proiectelor adăugați următoarea linie: Aplicație. ShowMainForm: = False; înainte de cerere. CreateForm (TMainForm, MainForm); De exemplu, lăsați-l să pară:

...
începe
Aplicație. Inițializare;
Aplicație. ShowMainForm: = False;
Aplicație. CreateForm (TMainForm, MainForm);
Aplicație. Alerga;
Sfârșit.

Și în final, pentru ca pictograma tăvii noastre să răspundă la evenimentele mouse-ului, trebuie să creăm o procedură de gestionare a mesajelor. În primul rând, declarăm o procedură de tratare a mesajelor în partea publică a declarației de formular: procedura TrayMessage (var Msg: TMessage); mesaj WM_ICONTRAY; În al doilea rând, definiția acestei proceduri arată ca:

procedură Template. TrayMessage (var Msg: TMessage);
begincase Msg.lParam de
WM_LBUTTONDOWN:
începe
ShowMessage (faceți clic pe butonul din stânga
- haideți să ARAȚĂ formularul! ');
MainForm. Spectacol;
Sfârșit;
WM_RBUTTONDOWN:
începe
ShowMessage (butonul din dreapta a dat clic
- hai să ascundem formularul! ');
MainForm. Ascunde;
Sfârșit;
Sfârșit;
Sfârșit;

Această procedură este concepută pentru a gestiona doar mesajul nostru, WM_ICONTRAY. Acesta preia valoarea LParam din structura mesajului care ne poate oferi starea mouse-ului la activarea procedurii. Din simplitate, vom gestiona doar mouse-ul stânga în jos (WM_LBUTTONDOWN) și mouse-ul dreapta jos (WM_RBUTTONDOWN). Când butonul stânga al mouse-ului este jos pe pictogramă, vom arăta forma principală, când este apăsat butonul din dreapta îl ascundem. Desigur, există și alte mesaje de introducere a mouse-ului pe care le puteți gestiona în cadrul procedurii, cum ar fi, butonul sus, butonul dublu clic etc.

Asta e. Rapid și ușor. În continuare, veți vedea cum să animați pictograma în tavă și cum să faceți ca această pictogramă să reflecte starea aplicației dvs. Și mai mult, veți vedea cum să afișați un meniu pop-up lângă pictogramă.

instagram story viewer