Sistemos dėklo Delphi taikymas

Pažvelkite į savo užduočių juostą. Matote vietovę, kurioje yra laikas? Ar ten yra kokių nors kitų piktogramų? Vieta vadinama „Windows“ sistemos dėkle. Ar norėtumėte patalpinti savo Delfi programos piktograma ten? Ar norėtumėte, kad ši piktograma būtų animacinė - ar atspindėtų jūsų programos būseną?

Tai būtų naudinga toms programoms, kurios paliekamos veikti ilgą laiką be vartotojo sąveikos (fono užduotys, kurias paprastai vykdote kompiuteryje visą dieną).

Tai, ką galite padaryti, yra tai, kad jūsų „Delphi“ programos atrodytų taip, tarsi sumažėtų iki dėklo (o ne prie programos) Užduočių juostoje, dešinėje prie mygtuko „Pradėti“, pradžios) įdėdami piktogramą į dėklą ir tuo pačiu sudarydami formą (-as) nematomas.

Trauksime tai

Laimei, sukurti programą, veikiančią sistemos dėkle, yra gana lengva - užduočiai atlikti reikia tik vienos (API) funkcijos - „Shell_NotifyIcon“.

Funkcija apibrėžta „ShellAPI“ įrenginys ir reikalauja dviejų parametrų. Pirmasis yra vėliava, nurodantis, ar piktograma pridedama, modifikuojama ar pašalinama, o antrasis yra žyma į „TNotifyIconData“ struktūrą, kurioje yra informacija apie piktogramą. Tai apima rodomos piktogramos rankeną, tekstą, kuris turi būti rodomas kaip įrankio patarimas, kai pelė yra virš piktogramos, lango, kuris gaus piktogramos pranešimus, rankena ir pranešimo tipas, kurį piktograma jums nusiųs langas.

instagram viewer

Pirma, pagrindinės formos skiltyje „Privatus“ įrašykite eilutę:
„TrayIconData“: „TNotifyIconData“;

tipo
TMainForm = klasė(TForm)
procedūra „FormCreate“ (siuntėjas: „TObject“);
privatus
„TrayIconData“: „TNotifyIconData“;
{Privačios deklaracijos}viešai{Vieši pareiškimai}galas;

Tada jūsų pagrindinėje formoje „OnCreate“ metodą, inicijuokite „TrayIconData“ duomenų struktūrą ir iškvieskite funkciją „Shell_NotifyIcon“:

su „TrayIconData“ dobeginas
cbSize: = SizeOf („TrayIconData“);
Wnd: = Rankena;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Taikymas. Piktograma. Rankena;
„StrPCopy“ („szTip“, „Application“). Pavadinimas);
galas;
„Shell_NotifyIcon“ (NIM_ADD, @TrayIconData);

„TrayIconData“ struktūros „Wnd“ parametras nukreipia į langą, kuriame gaunami pranešimų pranešimai, susieti su piktograma.

„HIcon“ nurodo piktogramą, kurią norime pridėti prie dėklo - šiuo atveju naudojama pagrindinė programų piktograma.
„SzTip“ turi įrankio patarimo tekstą, kad būtų rodoma piktograma - mūsų atveju programos pavadinimas. „SzTip“ gali sudaryti iki 64 simbolių.
Parametras „uFlags“ nustatytas nurodyti piktogramai apdoroti programos pranešimus, naudoti programos piktogramą ir jos patarimą. „uCallbackMessage“ nurodo programos apibrėžtą pranešimo identifikatorių. Sistema naudoja nurodytą identifikatorių pranešimų pranešimams, kuriuos ji siunčia į langą, kurį identifikuoja Wnd, kai pelės įvykis įvyksta ribojančiame piktogramos stačiakampyje. Šis parametras yra nustatytas kaip WM_ICONTRAY konstanta, apibrėžta formų vieneto sąsajos skyriuje, ir lygi: WM_USER + 1;

Jūs pridedate piktogramą prie dėklo, paskambinę į „Shell_NotifyIcon“ API funkciją. Pirmasis parametras „NIM_ADD“ prideda piktogramą dėklo srityje. Kitos dvi galimos vertės, NIM_DELETE ir NIM_MODIFY, naudojamos ištrinti arba modifikuoti dėkle esančią piktogramą - pamatysime vėliau šiame straipsnyje. Antrasis parametras, kurį siunčiame „Shell_NotifyIcon“, yra inicijuota „TrayIconData“ struktūra.

Paimk vieną

Jei Vykdysite savo projektą dabar, šalia laikrodžio dėkle pamatysite piktogramą. Atkreipkite dėmesį į tris dalykus.

1) Pirmiausia, nieko neįvyksta, kai spustelite (arba darote ką nors kita su pele) piktogramą, esančią dėkle - dar nesukūrėme procedūros (pranešimų tvarkyklė).
2) Antra, užduočių juostoje yra mygtukas (mes akivaizdžiai to nenorime).
3) Trečia, uždarius programą, piktograma išlieka dėkle.

Paimk du

Išspręskime tai atgal. Norėdami pašalinti piktogramą iš dėklo, kai išeisite iš programos, turite dar kartą paskambinti į „Shell_NotifyIcon“, bet kaip pirmąjį parametrą - „NIM_DELETE“. Tai darote „OnDestroy“ renginių vedėjas pagrindinei formai.

procedūra „TMainForm“. „FormDestroy“ (siuntėjas: „TObject“);
prasideda
„Shell_NotifyIcon“ (NIM_DELETE, @TrayIconData);
galas;

Norėdami paslėpti programą (programos mygtuką) nuo užduočių juostos, naudosime paprastą triuką. Prie Projektų šaltinio kodo pridėkite šią eilutę: Taikymas. ShowMainForm: = Netiesa; prieš paraišką. „CreateForm“ (TMainForm, MainForm); E.g tegul atrodo taip:

...
prasideda
Taikymas. Inicijuoti;
Taikymas. ShowMainForm: = Netiesa;
Taikymas. „CreateForm“ (TMainForm, MainForm);
Taikymas. Bėk;
galas.

Galiausiai, norėdami, kad mūsų dėklo piktograma reaguotų į pelės įvykius, turime sukurti pranešimų tvarkymo tvarką. Pirmiausia skelbiame pranešimų tvarkymo procedūrą viešoje formos deklaracijos dalyje: procedūra „TrayMessage“ (var Msg: TMessage); pranešimas WM_ICONTRAY; Antra, šios procedūros apibrėžimas atrodo taip:

procedūra „TMainForm“. „TrayMessage“ (var Msg: TMessage);
pradinis pavyzdys Msg.lParam apie
WM_LBUTTONDOWN:
prasideda
„ShowMessage“ (spustelėtas kairysis mygtukas
- parodykime formą! ');
„MainForm“. Rodyti;
galas;
WM_RBUTTONDOWN:
prasideda
„ShowMessage“ (spustelėtas dešinysis mygtukas
- Slėpkime formą! ');
„MainForm“. Paslėpti;
galas;
galas;
galas;

Ši procedūra skirta tvarkyti tik mūsų pranešimą, WM_ICONTRAY. „LParam“ reikšmė paimama iš pranešimo struktūros, kuri gali suteikti mums pelės būseną suaktyvinus procedūrą. Paprastumo dėlei mes valdysime tik kairę pelę žemyn (WM_LBUTTONDOWN) ir dešinę pelę žemyn (WM_RBUTTONDOWN). Kai kairiuoju pelės mygtuku nusileidžiame ant piktogramos, mes rodome pagrindinę formą, paspaudę dešinįjį mygtuką, mes ją paslepiame. Žinoma, yra ir kitų pelės įvesties pranešimų, kuriuos galite tvarkyti atlikdami procedūrą, pavyzdžiui, mygtukas aukštyn, mygtuko dvigubas spustelėjimas ir tt

Viskas. Greita ir lengva. Tada pamatysite, kaip pagyvinti piktogramą dėkle ir kaip šią piktogramą atspindėti jūsų programos būseną. Dar daugiau pamatysite, kaip šalia piktogramos rodyti iškylantįjį meniu.