Podívejte se na hlavní panel. Vidíte oblast, kde se nachází čas? Existují nějaké další ikony? Místo se nazývá systémový zásobník systému Windows. Chtěli byste umístit svůj Delphi ikona aplikace tam? Chcete, aby byla tato ikona animovaná - nebo odrážela stav vaší aplikace?
To by bylo užitečné pro programy, které zůstávají spuštěny po dlouhou dobu bez interakce uživatele (úkoly na pozadí, které obvykle běžíte v počítači po celý den).
Můžete udělat to, aby vaše aplikace Delphi vypadaly, jako by minimalizovaly zásobník (namísto Panel úloh, přímo na tlačítko Start Start) umístěním ikony do zásobníku a současným vytvářením formulářů neviditelný.
Pojďme to Tray It
Naštěstí je vytvoření aplikace, která běží na systémové liště, velmi snadné - k provedení úkolu je zapotřebí pouze jedna funkce (API), Shell_NotifyIcon.
Funkce je definována v Jednotka ShellAPI a vyžaduje dva parametry. První je příznak označující, zda je ikona přidávána, upravována nebo odebírána, a druhý je ukazatel na strukturu TNotifyIconData, který drží informaci o ikoně. To zahrnuje popisovač ikony, která se má zobrazit, text zobrazený jako tip nástroje, když je myš nad ikonou, popisovač okna, které bude přijímat zprávy ikony a typ zprávy, na kterou ikona pošle okno.
Nejprve ve své hlavní části v sekci Soukromé vložte řádek:
TrayIconData: TNotifyIconData;
typ
TMainForm = třída(TForm)
postup FormCreate (odesílatel: TObject);
soukromé
TrayIconData: TNotifyIconData;
{Soukromá prohlášení}veřejnost{Veřejná prohlášení}konec;
Pak ve vaší hlavní podobě OnCreate metoda, inicializovat datovou strukturu TrayIconData a volat funkci Shell_NotifyIcon:
s TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Handle;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Aplikace. Ikona. Rukojeť;
StrPCopy (szTip, Aplikace. Titul);
konec;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);
Parametr Wnd struktury TrayIconData odkazuje na okno, které přijímá oznamovací zprávy spojené s ikonou.
HIcon ukazuje na ikonu, kterou chceme přidat do zásobníku - v tomto případě se používá hlavní ikona Aplikace.
SzTip drží text popisku pro zobrazení ikony - v našem případě název aplikace. SzTip pojme až 64 znaků.
Parametr uFlags je nastaven tak, aby oznamoval ikoně zpracování zpráv aplikace, použití ikony aplikace a jejího tipu. uCallbackMessage odkazuje na identifikátor zprávy definované aplikací. Systém používá určený identifikátor pro oznamovací zprávy, které odešle do okna identifikovaného Wnd, kdykoli se v ohraničujícím obdélníku ikony objeví událost myši. Tento parametr je nastaven na konstantu WM_ICONTRAY definovanou v části rozhraní jednotky formulářů a rovná se: WM_USER + 1;
Ikonu přidáte do zásobníku voláním funkce rozhraní Shell_NotifyIcon API. První parametr „NIM_ADD“ přidá ikonu do oblasti Tray. Další dvě možné hodnoty, NIM_DELETE a NIM_MODIFY, se používají k odstranění nebo úpravě ikony v zásobníku - uvidíme, jak později v tomto článku. Druhým parametrem, který posíláme do Shell_NotifyIcon, je inicializovaná struktura TrayIconData.
Vzít jednu
Pokud nyní spustíte svůj projekt, zobrazí se vedle ikony v zásobníku ikona. Všimněte si tří věcí.
1) Nejprve se nic nestane, když kliknete (nebo uděláte cokoli jiného pomocí myši) na ikonu umístěnou v zásobníku - ještě jsme nevytvořili postup (zpracovatel zpráv).
2) Za druhé, na hlavním panelu je tlačítko (samozřejmě to tam nechceme).
3) Zatřetí, po zavření aplikace zůstane ikona v zásobníku.
Vezmi si dva
Řekněme to zpětně. Aby byla ikona po ukončení aplikace odstraněna ze zásobníku, musíte znovu zavolat Shell_NotifyIcon, ale s prvním parametrem NIM_DELETE. Uděláte to v OnDestroy obsluha události pro hlavní formulář.
postup TMainForm. FormDestroy (odesílatel: TObject);
začít
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
konec;
Ke skrytí aplikace (tlačítka aplikace) z hlavního panelu použijeme jednoduchý trik. Do zdrojového kódu Projekty přidejte následující řádek: Aplikace. ShowMainForm: = False; před aplikací. CreateForm (TMainForm, MainForm); E.g nech to vypadat takto:
...
začít
Aplikace. Inicializovat;
Aplikace. ShowMainForm: = False;
Aplikace. CreateForm (TMainForm, MainForm);
Aplikace. Běh;
konec.
A konečně, aby naše ikona Tray reagovala na události myši, musíme vytvořit postup zpracování zpráv. Nejprve prohlásíme postup zpracování zpráv ve veřejné části formuláře prohlášení: procedure TrayMessage (var Msg: TMessage); zpráva WM_ICONTRAY; Za druhé, definice tohoto postupu vypadá takto:
postup TMainForm. TrayMessage (var Msg: TMessage);
začátečník Msg.lParam z
WM_LBUTTONDOWN:
začít
ShowMessage ('Kliknutí levého tlačítka
- Podívejme se na formulář! ');
MainForm. Ukázat;
konec;
WM_RBUTTONDOWN:
začít
ShowMessage ('Kliknuto pravým tlačítkem
- Skryjme formulář! ');
MainForm. Skrýt;
konec;
konec;
konec;
Tento postup je navržen tak, aby zpracovával pouze naši zprávu, WM_ICONTRAY. Převezme hodnotu LParam ze struktury zprávy, která nám může po aktivaci postupu poskytnout stav myši. Kvůli jednoduchosti zvládneme pouze levou myší dolů (WM_LBUTTONDOWN) a pravou myší dolů (WM_RBUTTONDOWN). Když je levé tlačítko myši dole na ikoně, zobrazíme hlavní formulář, při stisknutí pravého tlačítka jej skryjeme. Samozřejmě existují i jiné zprávy pro zadávání myší, které můžete v tomto postupu zpracovat, jako například tlačítko nahoru, dvojité kliknutí na tlačítko atd.
A je to. Rychlé a snadné. Dále uvidíte, jak animovat ikonu v zásobníku a jak tuto ikonu promítnout do stavu vaší aplikace. Ještě více uvidíte, jak zobrazit rozbalovací nabídku v blízkosti ikony.