Aplikácia System Tray Delphi

Prezrite si panel úloh. Vidíte oblasť, kde sa čas nachádza? Existujú nejaké ďalšie ikony? Miesto sa nazýva systémový zásobník systému Windows. Chcete umiestniť váš Delphi ikona aplikácie tam? Prajete si, aby bola táto ikona animovaná - alebo aby odrážala stav vašej aplikácie?

Toto by bolo užitočné pre programy, ktoré zostávajú v prevádzke po dlhú dobu bez interakcie používateľa (úlohy na pozadí, ktoré sú zvyčajne v počítači celodenne)

Čo môžete urobiť, je, aby vaše aplikácie Delphi vyzerali, akoby minimalizovali zásobník (namiesto Panel úloh, priamo na tlačidlo Win Start) umiestnením ikony do panela a súčasným vytvorením formulára (formulárov) neviditeľné.

Poďme to Tray It

Našťastie je vytvorenie aplikácie, ktorá beží na systémovej lište, veľmi jednoduché - na splnenie úlohy je potrebná iba jedna funkcia (API), Shell_NotifyIcon.

Funkcia je definovaná v Jednotka ShellAPI a vyžaduje dva parametre. Prvý je príznak označujúci, či sa ikona pridáva, upravuje alebo odstraňuje, a druhý je ukazovateľ na štruktúru TNotifyIconData obsahujúci informácie o ikone. To zahŕňa popisovač ikony, ktorá sa má zobraziť, text, ktorý sa má zobraziť ako tip nástroja, keď je myš nad ikonou, popisovač okna, v ktorom sa budú prijímať správy ikony a typu správy, do ktorej sa ikona odošle okno.

instagram viewer

Najprv do sekcie Súkromie vo svojom hlavnom formulári uveďte riadok:
TrayIconData: TNotifyIconData;

typ
TMainForm = trieda(TForm)
procedúra FormCreate (odosielateľ: TObject);
súkromné
TrayIconData: TNotifyIconData;
{Súkromné ​​vyhlásenia}verejnosť{Verejné vyhlásenia}koniec;

Potom vo vašej hlavnej podobe OnCreate inicializujte dátovú štruktúru TrayIconData a zavolajte funkciu Shell_NotifyIcon:

s TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Rukoväť;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Aplikácia. Ikona. zvládnuť;
StrPCopy (szTip, Aplikácia. Title);
koniec;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);

Parameter Wnd štruktúry TrayIconData ukazuje na okno, ktoré prijíma oznamovacie správy spojené s ikonou.

HIcon ukazuje na ikonu, ktorú chceme pridať do zásobníka - v tomto prípade sa používa hlavná ikona Aplikácie.
SzTip drží text popisov, ktorý sa má zobraziť pre ikonu - v našom prípade názov aplikácie. Program szTip môže pojať až 64 znakov.
Parameter uFlags je nastavený tak, aby informoval ikonu o spracovaní správ aplikácie, použití ikony aplikácie a jej tipu. uCallbackMessage odkazuje na identifikátor správy definovaný aplikáciou. Systém používa špecifikovaný identifikátor pre notifikačné správy, ktoré posiela do okna identifikovaného Wnd vždy, keď sa v ohraničujúcom obdĺžniku ikony vyskytne udalosť myši. Tento parameter je nastavený na konštantu WM_ICONTRAY definovanú v časti rozhrania jednotky formulárov a rovná sa: WM_USER + 1;

Ikonu pridáte do zásobníka zavolaním funkcie rozhrania API Shell_NotifyIcon. Prvý parameter „NIM_ADD“ pridá ikonu do oblasti Zásobník. Ďalšie dve možné hodnoty, NIM_DELETE a NIM_MODIFY, sa používajú na odstránenie alebo úpravu ikony v zásobníku - uvidíme, ako neskôr v tomto článku. Druhý parameter, ktorý posielame do Shell_NotifyIcon, je inicializovaná štruktúra TrayIconData.

Zober si jedno

Ak teraz spustíte svoj projekt, uvidíte ikonu vedľa hodín v zásobníku. Všimnite si tri veci.

1) Najprv sa nič nestane, keď kliknete (alebo urobíte čokoľvek iné pomocou myši) na ikonu umiestnenú v zásobníku - ešte sme nevytvorili postup (správca správ).
2) Po druhé, na paneli úloh je tlačidlo (samozrejme to tam nechceme).
3) Po tretie, po zatvorení aplikácie zostane ikona v zásobníku.

Zober dva

Vyriešime to spätne. Aby ste po ukončení aplikácie odstránili ikonu zo zásobníka, musíte znova zavolať Shell_NotifyIcon, ale s prvým parametrom NIM_DELETE. Robíte to v OnDestroy obsluha udalosti pre hlavný formulár.

procedúra TMainForm. FormDestroy (odosielateľ: TObject);
začať
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
koniec;

Na skrytie aplikácie (tlačidla aplikácie) na paneli úloh použijeme jednoduchý trik. Do zdrojového kódu Projekty pridajte nasledujúci riadok: Aplikácia. ShowMainForm: = False; pred podaním žiadosti. CreateForm (TMainForm, MainForm); Napríklad:

...
začať
Aplikácie. inicializácia;
Aplikácie. ShowMainForm: = False;
Aplikácie. CreateForm (TMainForm, MainForm);
Aplikácie. bežať;
koniec.

A nakoniec, aby naša ikona Tray reagovala na udalosti myši, musíme vytvoriť postup spracovania správ. Najprv deklarujeme postup spracovania správ vo verejnej časti formulára vyhlásenia: procedure TrayMessage (var Msg: TMessage); správa WM_ICONTRAY; Po druhé, definícia tohto postupu vyzerá takto:

procedúra TMainForm. TrayMessage (var Msg: TMessage);
begincase Msg.lParam z
WM_LBUTTONDOWN:
začať
ShowMessage ('Klikol ľavým tlačidlom
- Ukážme formulár! ');
MainForm. Šou;
koniec;
WM_RBUTTONDOWN:
začať
ShowMessage (klikol pravým tlačidlom
- Skryme formulár! ');
MainForm. skryť;
koniec;
koniec;
koniec;

Tento postup je navrhnutý tak, aby spracovával iba našu správu, WM_ICONTRAY. Preberá hodnotu LParam zo štruktúry správy, ktorá nám môže po aktivácii postupu poskytnúť stav myši. Kvôli jednoduchosti zvládneme iba ľavú myš dole (WM_LBUTTONDOWN) a pravú myš dole (WM_RBUTTONDOWN). Keď je ľavé tlačidlo myši nad ikonou, zobrazíme hlavný formulár, keď stlačíme pravé tlačidlo, skryjeme ho. Samozrejme, existujú aj ďalšie správy o vstupe myši, ktoré môžete v tomto postupe zvládnuť, ako napríklad stlačenie tlačidla, dvojité kliknutie atď.

To je všetko. Rýchle a ľahké. Ďalej sa dozviete, ako animovať ikonu v zásobníku a ako túto ikonu odzrkadliť v stave vašej aplikácie. Ešte viac uvidíte, ako zobraziť rozbaľovaciu ponuku v blízkosti ikony.

instagram story viewer