Plasarea unei pictograme de aplicație în tava de sistem - articole

Adesea, un programator trebuie să se ocupe de sarcina de a scrie o aplicație care rulează în fundal și nu are nevoie de un loc pe bara de activități. Dacă te uiți la colțul din dreapta jos al desktop-ului Windows, veți găsi cu siguranță acolo aplicații pentru care se rezolvă această problemă: ceasul, comuta aspectul tastaturii, de control al volumului, etc. Este clar că, indiferent de modul în care a mări sau micșora forma propriei lor .. aplicație, ajunge acolo după modul obișnuit nu va reuși. O modalitate pentru aceasta este oferită de API-ul Shell.







Imaginile care se află pe tava de sistem sunt într-adevăr imagini și nu ferestre minimalizate. Acestea sunt gestionate și localizate de tava de sistem. De asemenea, are două funcții: afișarea unei sugestii pentru fiecare dintre pictograme și notificarea aplicației care a creat pictograma cu privire la toate mișcările mouse-ului deasupra acesteia.

Întregul API al System Tray este compus din 1 (o) funcție:

Parametrul dwMessage specifică una dintre operațiuni: NIM_ADD înseamnă adăugarea unei pictograme în domeniul de aplicare, NIM_DELETE este ștergerea, NIM_MODIFY este schimbarea.

Progresul operației depinde de câmpurile din structura TNotifyiconData. Necesar pentru umplere este câmpul cbsize - conține dimensiunea structurii. Câmpul Wnd trebuie să conțină un descriptor de fereastră care va fi notificat despre evenimentele asociate pictogramei. ID-ul mesajului Windows pe care doriți să îl primiți din sistem despre mișcările mouse-ului deasupra pictogramei, scrieți în câmpul uCallbackMessage. Dacă doriți să fie afișată o pictogramă deasupra pictogramei pentru aceste miscări, setați textul în câmpul szTip. Câmpul UID specifică numărul pictogramei - fiecare aplicație poate plasa cât mai multe pictograme pe tava de sistem. Operațiile ulterioare vor fi efectuate prin setarea acestui număr. Descrierea pictogramei care trebuie plasată trebuie specificată în câmpul hIcon. Aici puteți seta pictograma asociată aplicației dvs. sau puteți încărca propria dvs. - din resurse.

Notă. Puteți modifica pictograma principală a aplicației în caseta de dialog Proiect / Opțiuni din pagina Aplicație. Acesta va fi accesibil prin proprietatea Application.Icon. De asemenea, puteți edita promptul și proprietatea Application.Title.







În cele din urmă, în uFlags pe teren trebuie să spun sistemul ceea ce vrei de la ea, sau, cu alte cuvinte, care dintre câmpuri HICON, uCaiibackMessage și szTip ai umplut de fapt. Acest câmp oferă o combinație de trei pavilioane: NIF_ICON, NIF_MESSAGE și NIF_TIP. Puteți completa, să zicem, câmpul szTip, dar dacă nu este stabilit pictograma de pavilion NIF_TIP ați creat nu va avea rânduri cu vârful.

Cele două metode de mai jos ilustrează ceea ce sa spus. Primul creează o pictogramă pe Tava de sistem, iar al doilea o distruge.

Notă: nu uitați să distrugeți pictogramele create pe Tava de sistem. Acest lucru nu se face automat chiar și atunci când aplicația este închisă. Pictograma va fi ștearsă numai după ce sistemul este repornit. Apariția icoanei plasate de noi pe tava de sistem nu se deosebește de pictogramele altor aplicații.

Mesajul specificat în câmpul uCallbackMessage este, în esență, singurul fir care vă conectează la pictograma după crearea acesteia. Combină mai multe mesaje. Când vii la un astfel de mesaj (în exemplul de mai sus, are un identificator WM_MYTRAYNOTIFY), în câmpul trecut la handler TMessage structura de tip, astfel distribuite. Parametrul wParam conține numărul pictogramei (cel care a fost stabilit în uid când a fost creată) și opțiunea lParam - .. identificatorul de mesaje al mouse-ului, cum ar fi WM_MOUSEMOVE, WM_LBUTTONDOWN, etc. Din păcate, restul informațiilor din aceste mesaje este pierdut. Coordonatele mouse-ului în momentul evenimentului trebuie să fie cunoscute apelând funcția API GetCursorPos:

Rețineți că atunci când sunt afișate meniuri pop-up, simpla apelare a metodei Popup nu este suficientă. În același timp, trebuie să luați forma principală a aplicației în prim-plan, altfel nu va primi mesaje din meniu.

Acum vom rezolva încă două probleme. În primul rând, cum pot face ca aplicația să nu fie redusă la bara de activități (TaskBar), dar în Tava de sistem? Și mai mult - cum să o executați într-o formă minimizată și să afișați forma principală numai după apariția unui anumit eveniment (poșta primită, sosirea unui anumit timp etc.).

Răspunsul la prima întrebare este evident. Dacă minimalizați nu numai fereastra principală a aplicației (Application.MainForm.Handle), ci și fereastra aplicației (Application.Handle), atunci aplicația dispare complet "de pe ecrane radar". În acest moment, trebuie să creați o pictogramă în tava de sistem. În meniul pop-up trebuie să existe un element, când este selectat, ambele ferestre sunt restaurate și pictograma este ștearsă.

Pentru ca aplicația să pornească imediat într-o formă minimizată și fără forma principală, adăugați setarea proprietății Application.showMainForm la False la cele de mai sus. Aici există o dificultate - dacă forma principală a fost creată într-o stare invizibilă, componentele sale vor fi create și invizibile. Prin urmare, prima dată când este afișată, setați proprietatea lor vizibilă la True. Pentru a nu repeta acest lucru de două ori, setați pavilionul - variabila globală afișatăoncepută:







Trimiteți-le prietenilor: