Delphi aplikacija na programskoj traci sustava

Pogledajte svoju traku sa zadacima. Vidite područje gdje se nalazi vrijeme? Postoje li još neke ikone? Mjesto se zove Traka sustava Windows. Želite li staviti svoje Delphi tamo je ikona aplikacije? Želite li animirati tu ikonu - ili odražavati stanje vaše prijave?

Ovo bi bilo korisno za programe koji se dugo vremena izvode bez korisničkih interakcija (pozadinski zadaci koji se obično održavaju na računalu tijekom cijelog dana).

Ono što možete učiniti je da vaše Delphi aplikacije izgledaju kao da se minimiziraju na ladici (umjesto na Traka sa zadacima, desno do gumba Win Start) stavljanjem ikone u ladicu i istovremeno izrade obrazaca nevidljiv.

Pustimo ga

Srećom, stvaranje aplikacije koja radi u sistemskoj traci prilično je jednostavno - za izvršavanje zadatka potrebna je samo jedna (API) funkcija, Shell_NotifyIcon.

Funkcija je definirana u ShellAPI jedinica i zahtijeva dva parametra. Prva je zastava koja označava dodavanje, izmjenu ili uklanjanje ikone, a druga je pokazivač na strukturu TNotifyIconData koja sadrži podatke o ikoni. To uključuje ručku ikone za prikaz, tekst koji će se prikazati kao savjet alata kada miš prijeđe iznad ikone, drška prozora koja će primati poruke ikone i vrstu poruke koju će ikona poslati prozor.

instagram viewer

Prvo, u glavnom dijelu vašeg privatnog dijela stavite liniju:
TrayIconData: TNotifyIconData;

tip
TMainForm = klasa(TForm)
postupak FormCreate (pošiljalac: TObject);
privatna
TrayIconData: TNotifyIconData;
{Privatne izjave}javnost{Javne izjave}kraj;

Zatim u glavnom obliku onCreate metoda, inicijalizirajte strukturu podataka TrayIconData i nazovite funkciju Shell_NotifyIcon:

s TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Ručka;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = aplikacija. Ikona. Ručka;
StrPCopy (szTip, aplikacija. Titula);
kraj;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);

Wnd parametar strukture TrayIconData upućuje na prozor koji prima obavijesti povezane s ikonom.

HIcon ukazuje na ikonu koju želimo dodati u ladicu - u ovom slučaju se koristi glavna ikona programa.
SzTip drži tekst Tooltip za prikaz ikone - u našem slučaju naslov aplikacije. SzTip može sadržavati do 64 znaka.
Parametar uFlags postavljen je za navođenje ikone za obradu poruka aplikacije, korištenje ikone aplikacije i njenog vrha. uCallbackMessage ukazuje na identifikator poruke definiran aplikacijom. Sustav koristi navedeni identifikator za obavijesne poruke koje šalje u prozoru koji je Wnd identificirao kad god se događaj miša u ograničavajućem pravokutniku ikone. Ovaj je parametar postavljen na konstantnu WM_ICONTRAY definiranu u dijelu sučelja jedinice obrasca i jednaka je: WM_USER + 1;

Ikonu dodate u ladicu pozivom funkcije Shell_NotifyIcon API. Prvi parametar "NIM_ADD" dodaje ikonu u područje ladice. Druge dvije moguće vrijednosti, NIM_DELETE i NIM_MODIFY, koriste se za brisanje ili izmjenu ikona u ladici - vidjet ćemo kako kasnije u ovom članku. Drugi parametar koji šaljemo Shell_NotifyIcon je inicijalizirana struktura TrayIconData.

Uzmi jedan

Ako sada pokrenete svoj projekt, vidjet ćete ikonu pored sata u ladici. Zabilježite tri stvari.

1) Prvo, ništa se ne događa kad kliknete (ili učinite bilo što drugo) mišem na ikonu u ladici - još uvijek nismo stvorili postupak (program za obradu poruka).
2) Drugo, na traci zadataka nalazi se gumb (tamo ga očito ne želimo).
3) Treće, kad zatvorite aplikaciju, ikona ostaje u ladici.

Uzmi dva

Riješimo to unatrag. Da biste ikonu uklonili iz ladice pri izlasku iz aplikacije, morate ponovo pozvati Shell_NotifyIcon, ali s NIM_DELETE kao prvim parametrom. To radite u programu OnDestroy dostavljač događaja za Glavni obrazac.

postupak TMainForm. FormDestroy (pošiljalac: TObject);
početi
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
kraj;

Da sakrijemo aplikaciju (gumb aplikacije) iz trake zadataka, poslužit ćemo se jednostavnim trikom. U izvorni kôd Projekti dodajte sljedeći redak: Aplikacija. ShowMainForm: = Lažno; prije prijave. CreateForm (TMainForm, MainForm); E.g neka izgleda ovako:

...
početi
Primjena. inicijalizirati;
Primjena. ShowMainForm: = Lažno;
Primjena. CreateForm (TMainForm, MainForm);
Primjena. Trčanje;
kraj.

I na kraju, da bi naša ikona ladice odgovarala na događaje mišem, moramo kreirati postupak rukovanja porukama. Prvo izjavljujemo postupak rukovanja porukama u javnom dijelu deklaracije obrasca: postupak TrayMessage (var Msg: TMessage); poruka WM_ICONTRAY; Drugo, definicija ovog postupka izgleda kao:

postupak TMainForm. TrayMessage (var Msg: TMessage);
begincase Msg.lParam od
WM_LBUTTONDOWN:
početi
ShowMessage (Kliknuo je lijevi gumb
- POKAŽIMO obrazac! ');
MainForm. Pokazati;
kraj;
WM_RBUTTONDOWN:
početi
ShowMessage ("Desno je pritisnuta tipka
- sakrijmo obrazac! ');
MainForm. Sakriti;
kraj;
kraj;
kraj;

Ovaj postupak je osmišljen da obrađuje samo našu poruku, WM_ICONTRAY. Vrijednost LParam uzima iz strukture poruka koja nam može dati stanje miša nakon aktiviranja postupka. Radi jednostavnosti upravljat ćemo samo lijevim mišem prema dolje (WM_LBUTTONDOWN) i desnim mišem prema dolje (WM_RBUTTONDOWN). Kad se lijeva tipka miša spusti na ikonu pokazuje se glavni obrazac, a kada pritisnemo desnu tipku sakrivamo je. Naravno, postoje i druge ulazne poruke miša s kojima se možete baviti u postupku, primjerice, gumb gore, dvostruki klik na gumb itd.

To je to. Brzo i jednostavno. Zatim ćete vidjeti kako animirati ikonu u ladici i kako ta ikona odražava stanje vaše aplikacije. Čak štoviše, vidjet ćete kako prikazati skočni izbornik u blizini ikone.

instagram story viewer