Sistēmas teknes Delphi aplikācija

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

Tas būtu noderīgi programmām, kuras ilgstoši darbojas bez lietotāja mijiedarbības (fona uzdevumi, kurus parasti veicat datorā visas dienas garumā).

Ko jūs varat darīt, ir likt Delphi lietojumprogrammām izskatīties tā, it kā tās samazinātu līdz teknei (nevis programmai) Uzdevumu josla, pa labi līdz pogai Win Start), ievietojot ikonu teknē un vienlaikus veidojot savu formu (-as) neredzams.

Pavadīsim to

Par laimi ir diezgan viegli izveidot lietojumprogrammu, kas darbojas sistēmas teknē - 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 karodziņš, kas norāda, vai ikona tiek pievienota, pārveidota vai noņemta, un otrais ir rādītājs TNotifyIconData struktūrai, kurā ir informācija par ikonu. Tas ietver ikonas rokturi, ko parādīt, tekstu, kas tiek parādīts kā rīka padoms, kad pele atrodas virs ikonas, tā loga rokturis, kurš saņems ikonas ziņojumus, un ziņojuma tips, kuru ikona tam nosūtīs logs.

instagram viewer

Pirmkārt, galvenās formas sadaļā Privāts ielieciet šādu rindu:
TrayIconData: TNotifyIconData;

tips
TMainForm = klase(TForm)
procedūra FormCreate (Sūtītājs: TObject);
Privāts
TrayIconData: TNotifyIconData;
{Privātas deklarācijas}publiski{Publiskās deklarācijas}beigas;

Tad jūsu galvenajā formā OnCreate metodi, inicializējiet TrayIconData datu struktūru un izsauciet Shell_NotifyIcon funkciju:

ar TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Rokturis;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Lietojumprogramma. Ikona. Rokturis;
StrPCopy (szTip, lietojumprogramma. Nosaukums);
beigas;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);

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

HIcon norāda uz ikonu, kuru mēs vēlamies pievienot teknei - šajā gadījumā tiek izmantota programmas galvenā ikona.
SzTip satur Tooltip tekstu, lai tiktu parādīta ikona - mūsu gadījumā lietojumprogrammas nosaukums. SzTip var būt līdz 64 rakstzīmēm.
Parametrs uFlags ir iestatīts tā, lai ikona norādītu, lai apstrādātu lietojumprogrammu ziņojumus, izmantojiet lietojumprogrammas ikonu un tās galu. uCallbackMessage norāda uz lietojumprogrammas definētu ziņojuma identifikatoru. Sistēma izmanto norādīto identifikatoru paziņojumu ziņojumiem, kurus 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 WM_ICONTRAY konstanti, kas noteikta veidlapas vienības interfeisa sadaļā, un ir vienāds ar: WM_USER + 1;

Jūs pievienojat ikonu teknei, piezvanot uz Shell_NotifyIcon API funkciju. Pirmais parametrs "NIM_ADD" pievieno ikonu teknes apgabalam. Pārējās divas iespējamās vērtības, NIM_DELETE un NIM_MODIFY, tiek izmantotas, lai izdzēstu vai mainītu ikonu teknē - mēs to redzēsim vēlāk šajā rakstā. Otrais parametrs, ko mēs nosūtām Shell_NotifyIcon, ir inicializētā TrayIconData struktūra.

Paņem vienu

Ja jūs vadīsit savu projektu tagad, pie pulksteņa pulksteņa teknē redzēsit ikonu. Ņemiet vērā trīs lietas.

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

Ņem divus

Atrisināsim šo atpalicību. Lai, izejot no lietojumprogrammas, ikona tiktu noņemta no teknes, jums atkal jāizsauc Shell_NotifyIcon, bet ar pirmo parametru - NIM_DELETE. Jūs to darāt OnDestroy pasākumu kopējs galvenajai formai.

procedūra TMainForm. FormDestroy (Sūtītājs: TObject);
sākt
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
beigas;

Lai paslēptu lietojumprogrammu (lietojumprogrammas pogu) no uzdevumjoslas, mēs izmantosim vienkāršu triku. Projektu avota kodā pievienojiet šādu rindu: Lietojumprogramma. ShowMainForm: = Nepatiess; pirms pieteikuma. CreateForm (TMainForm, MainForm); E.g ļauj tam izskatīties šādi:

...
sākt
Pieteikums. Palaist;
Pieteikums. ShowMainForm: = Nepatiess;
Pieteikums. CreateForm (TMainForm, MainForm);
Pieteikums. Skrien;
beigas.

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

procedūra TMainForm. TrayMessage (var Msg: TMessage);
sākumlapa Msg.lParam no
WM_LBUTTONDOWN:
sākt
ShowMessage ('Noklikšķinājis uz kreisās pogas
- parādīsim veidlapu! ');
MainForm. Izrāde;
beigas;
WM_RBUTTONDOWN:
sākt
ShowMessage ('Noklikšķinājis uz labās pogas
- paslēpsim veidlapu! ');
MainForm. Paslēpt;
beigas;
beigas;
beigas;

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

Tieši tā. Ātri un vienkārši. Tālāk redzēsit, kā animēt ikonu teknē un kā šai ikonai jāatspoguļo jūsu programmas stāvoklis. Vēl vairāk jūs redzēsit, kā blakus ikonai parādīt uznirstošo izvēlni.