Delphi lietojumprogrammu ievietošana sistēmas teknē

Uzņēmēja, kas strādā pie projekta datorā

Tomass Bārviks/Stons/Getty Images





Apskatiet savu uzdevumjoslu. Vai redzēt apgabalu, kurā atrodas laiks? Vai tur ir vēl kādas ikonas? Vietu sauc par Windows sistēmas tekni. Vai vēlaties ievietot savu Delfos lietojumprogrammas ikona tur? Vai vēlaties, lai šī ikona būtu animēta vai atspoguļotu jūsu lietojumprogrammas stāvokli?

Tas būtu noderīgi programmām, kuras tiek atstātas darboties ilgu laiku bez lietotāja mijiedarbības (fona uzdevumi, kas parasti tiek veikti datorā visu dienu).



Ko jūs varat darīt, ir panākt, lai jūsu Delphi lietojumprogrammas izskatītos tā, it kā tās būtu minimizētas uz paplātes (nevis uzdevumjoslā, tieši uz pogas Win Start), ievietojot ikonu teknē un vienlaikus padarot veidlapu(-as) neredzamas. .

Let's Tray It

Par laimi, izveidot lietojumprogrammu, kas darbojas sistēmas teknē, ir diezgan vienkārša — uzdevuma veikšanai ir nepieciešama tikai viena (API) funkcija Shell_NotifyIcon.



Funkcija ir definēta ShellAPI vienība un nepieciešami divi parametri. Pirmais ir karogs, kas norāda, vai ikona tiek pievienota, pārveidota vai noņemta, un otrais ir rādītājs uz TNotifyIconData struktūru, kurā ir informācija par ikonu. Tas ietver parādāmās ikonas rokturi, tekstu, kas jāparāda kā rīka padomu, kad pele atrodas virs ikonas, loga rokturi, kas saņems ikonas ziņojumus un ziņojuma veidu, ko ikona nosūtīs uz šo logu .

Pirmkārt, galvenās veidlapas sadaļā Privāts ievietojiet rindu:
TrayIconData: TNotifyIconData;

|_+_|

Pēc tam jūsu galvenajā formāOnCreatemetodi, inicializējiet TrayIconData datu struktūru un izsauciet funkciju Shell_NotifyIcon:

|_+_|

TrayIconData struktūras Wnd parametrs norāda uz logu, kurā tiek saņemti ar ikonu saistītie paziņojumu ziņojumi.



Ikona hIcon norāda uz ikonu, kuru vēlamies pievienot paplātei – šajā gadījumā tiek izmantota Lietojumprogrammu galvenā ikona.
SzTip satur rīka padoma tekstu, kas tiek parādīts ikonai — mūsu gadījumā — lietojumprogrammas nosaukums. szTip var saturēt līdz 64 rakstzīmēm.
Parametrs uFlags ir iestatīts, lai norādītu ikonai apstrādāt lietojumprogrammas ziņojumus, izmantot lietojumprogrammas ikonu un tās galu. The uCallbackMessage norāda uz lietojumprogrammas definēto ziņojuma identifikatoru. Sistēma izmanto norādīto identifikatoru paziņojumu ziņojumiem, ko tā nosūta uz Wnd identificēto logu ikreiz, kad ikonas ierobežojošajā taisnstūrī notiek peles notikums. Šis parametrs ir iestatīts uz konstanti WM_ICONTRAY, kas definēts veidlapu vienības saskarnes sadaļā, un ir vienāds ar: WM_USER + 1;

Jūs pievienojat ikonu paplātei, izsaucot Shell_NotifyIcon API funkciju. Pirmais parametrs 'NIM_ADD' pievieno ikonu paplātes apgabalam. Pārējās divas iespējamās vērtības, NIM_DELETE un NIM_MODIFY, tiek izmantotas, lai dzēstu vai modificētu ikonu teknē — to mēs redzēsim vēlāk šajā rakstā. Otrais parametrs, ko nosūtām uz Shell_NotifyIcon, ir inicializētā TrayIconData struktūra.



Paņem vienu

Ja palaižat projektu tagad, teknē blakus pulksteņa ikonai būs redzama ikona. Ņemiet vērā trīs lietas.

1) Pirmkārt, nekas nenotiek, kad noklikšķināt (vai kaut ko citu darāt ar peli) uz ikonas, kas ievietota Tray - mēs vēl neesam izveidojuši procedūru (ziņojumu apstrādātāju).
2) Otrkārt, uzdevumjoslā ir poga (mēs to acīmredzot nevēlamies).
3) Treškārt, aizverot lietojumprogrammu, ikona paliek teknē.



Ņem Divus

Atrisināsim to atpakaļgaitā. Lai ikona tiktu noņemta no teknes, kad izejat no lietojumprogrammas, vēlreiz ir jāizsauc Shell_NotifyIcon, bet kā pirmais parametrs ir NIM_DELETE. Jūs to darāt programmā OnDestroynotikumu apstrādātājsgalvenajai formai.

|_+_|

Lai paslēptu lietojumprogrammu (lietojumprogrammas pogu) no uzdevumjoslas, mēs izmantosim vienkāršu triku. Projektu pirmkodā pievienojiet šādu rindu: Application.ShowMainForm := False; pirms Pieteikuma.CreateForm(TMainForm, MainForm); Piemēram, lai tas izskatās šādi:



|_+_|

Un visbeidzot, lai mūsu ikona Tray reaģētu uz peles notikumiem, mums ir jāizveido ziņojumu apstrādes procedūra. Pirmkārt, mēs deklarējam ziņojumu apstrādes procedūru veidlapas deklarācijas publiskajā daļā: procedure TrayMessage(var Msg: TMessage); ziņojums WM_ICONTRAY; Otrkārt, šīs procedūras definīcija izskatās šādi:

|_+_|

Šī procedūra ir paredzēta, lai apstrādātu tikai mūsu ziņojumu WM_ICONTRAY. Tas ņem LParam vērtību no ziņojuma struktūras, kas var sniegt mums peles stāvokli pēc procedūras aktivizēšanas. Vienkāršības labad mēs darbosimies tikai ar peles kreiso taustiņu uz leju (WM_LBUTTONDOWN) un ar peles labo pogu uz leju (WM_RBUTTONDOWN). Kad peles kreisā poga atrodas uz leju uz ikonas, tiek parādīta galvenā forma, bet, nospiežot labo pogu, mēs to paslēpjam. Protams, ir arī citi peles ievades ziņojumi, kurus varat apstrādāt procedūrā, piemēram, pogas uz augšu, pogas dubultklikšķis utt.

Tieši tā. Ātri un vienkārši. Pēc tam redzēsit, kā animēt ikonu teknē un kā panākt, lai šī ikona atspoguļotu jūsu lietojumprogrammas stāvokli. Vēl vairāk, jūs redzēsit, kā blakus ikonai parādīt uznirstošo izvēlni.