Delphi aplikacija v sistemski vrstici

click fraud protection

Oglejte si svojo opravilno vrstico. Vidite območje, kjer se nahaja čas? So še kakšne ikone? Kraj se imenuje sistemska vrstica Windows. Bi radi dali svoje Delphi je ikona aplikacije tam? Ali želite, da se ta ikona animira - ali odraža stanje v vaši prijavi?

To bi bilo koristno za programe, ki se dalj časa izvajajo brez uporabniške interakcije (ozadja, ki jih običajno uporabljate ves dan v računalniku).

Kar lahko storite, je videti, da bodo vaše aplikacije Delphi izgledale, kot da se zmanjšajo na pladenj (namesto na Opravilna vrstica, desno od gumba Win Start), tako da v pladenj vstavite ikono in hkrati naredite obrazce neviden.

Vadimo ga

Na srečo je ustvarjanje aplikacije, ki deluje v sistemski vrstici, precej enostavno - za izvedbo naloge je potrebna le ena (API) funkcija, Shell_NotifyIcon.

Funkcija je določena v ShellAPI enota in zahteva dva parametra. Prva je zastava, ki kaže, ali ikono dodajamo, spreminjamo ali odstranjujemo, druga pa je kazalec na strukturo TNotifyIconData, ki vsebuje podatke o ikoni. To vključuje ročaj ikone za prikaz, besedilo, ki se prikaže kot namig orodja, ko miška nad ikono, ročaj okna, ki bo prejel sporočila ikone, in vrsto sporočila, ki ga bo ikona poslala okno.

instagram viewer

Prvič, v zasebnem razdelku vašega glavnega obrazca postavite vrstico:
TrayIconData: TNotifyIconData;

tip
TMainForm = razred(TForm)
postopek FormCreate (pošiljatelj: TObject);
zasebno
TrayIconData: TNotifyIconData;
{Zasebne izjave}javnosti{Javne izjave}konec;

Potem pa v glavnem obrazcu OnCreate metoda, inicializirajte podatkovno strukturo TrayIconData in pokličite funkcijo Shell_NotifyIcon:

s TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Ročaj;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = aplikacija. Ikona. Ročaj;
StrPCopy (szTip, aplikacija. Naslov);
konec;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);

Parameter Wnd v strukturi TrayIconData kaže na okno, ki sprejema obvestila, povezana z ikono.

HIcon kaže na ikono, ki jo želimo dodati v pladenj - v tem primeru se uporablja glavna ikona aplikacij.
SzTip vsebuje besedilo orodja za prikaz ikone - v našem primeru naslov aplikacije. SzTip lahko vsebuje do 64 znakov.
Parameter uFlags je nastavljen tako, da ikoni sporoči za obdelavo sporočil o aplikaciji, uporabo ikone aplikacije in njenega nasveta. The uCallbackMessage kaže na identifikator sporočila, ki ga določa aplikacija. Sistem uporablja podani identifikator za sporočila z obvestili, ki jih pošlje v okno, ki ga Wnd prepozna, kadarkoli se v omejenem pravokotniku ikone zgodi mišji dogodek. Ta parameter je nastavljen na konstanto WM_ICONTRAY, definirano v vmesnem delu enote obrazcev, in je enak: WM_USER + 1;

Ikono v pladenj dodate tako, da pokličete funkcijo API Shell_NotifyIcon. Prvi parameter "NIM_ADD" doda ikono na območje pladnja. Ostali dve možni vrednosti, NIM_DELETE in NIM_MODIFY, se uporabljata za brisanje ali spreminjanje ikone v pladnju - bomo videli v nadaljevanju tega članka. Drugi parameter, ki ga pošljemo Shell_NotifyIcon, je inicializirana struktura TrayIconData.

Vzemi enega

Če zdaj poganjate svoj projekt, boste v bližini pladnja videli ikono. Upoštevajte tri stvari.

1) Najprej se nič ne zgodi, ko kliknete (ali naredite kaj drugega z miško) na ikono v pladnju - še nismo ustvarili postopka (upravljavec sporočil).
2) Drugič, na opravilni vrstici je gumb (tam ga očitno ne želimo).
3) Tretjič, ko zaprete aplikacijo, ostane ikona v pladnju.

Vzemi dva

Rešimo to za nazaj. Če želite ikono odstraniti iz pladnja, ko zapustite aplikacijo, morate znova poklicati Shell_NotifyIcon, vendar z NIM_DELETE kot prvim parametrom. To naredite v programu OnDestroy obdelovalec dogodkov za obrazec Main.

postopek TMainForm. FormDestroy (pošiljatelj: TObject);
začeti
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
konec;

Za skrivanje aplikacije (gumb aplikacije) v opravilni vrstici bomo uporabili preprost trik. V izvorno kodo projektov dodajte naslednjo vrstico: aplikacija. ShowMainForm: = Lažno; pred aplikacijo. CreateForm (TMainForm, MainForm); E.g naj izgleda tako:

...
začeti
Uporaba. Pobuda;
Uporaba. ShowMainForm: = Lažno;
Uporaba. CreateForm (TMainForm, MainForm);
Uporaba. Teči;
konec.

In končno, da se naša ikona pladnja odzove na miške, moramo ustvariti postopek za obdelavo sporočil. Najprej v javnem delu izjave obrazca razglasimo postopek ravnanja s sporočili: postopek TrayMessage (var Msg: TMessage); sporočilo WM_ICONTRAY; Drugič, opredelitev tega postopka je videti:

postopek TMainForm. TrayMessage (var Msg: TMessage);
začetnica Msg.lParam od
WM_LBUTTONDOWN:
začeti
ShowMessage ("Klikni levi gumb
- pokaži obrazec! ');
MainForm. Pokaži;
konec;
WM_RBUTTONDOWN:
začeti
ShowMessage ('Klikni desni gumb
- Skrijmo obrazec! ');
MainForm. Skriti;
konec;
konec;
konec;

Ta postopek je zasnovan tako, da obravnava samo naše sporočilo, WM_ICONTRAY. Vrednost LParam prevzame iz strukture sporočila, ki nam lahko daje stanje miške ob aktiviranju postopka. Zaradi poenostavitve bomo upravljali le levo miško navzdol (WM_LBUTTONDOWN) in desno miško navzdol (WM_RBUTTONDOWN). Ko je levi gumb miške na ikoni prikazan glavni obrazec, ko pritisnemo desni gumb, ga skrijemo. Seveda obstajajo tudi druga vhodna sporočila z miško, s katerimi lahko ravnate v postopku, na primer, gumb gor, dvojni klik gumba itd.

To je to. Hitro in enostavno. Nato boste videli, kako animirati ikono v pladnju in kako ta ikona odraža stanje vaše aplikacije. Še več, videli boste, kako se prikaže pojavni meni ob ikoni.

instagram story viewer