Järjestelmälokeron Delphi-sovellus

Tutustu tehtäväpalkkiisi. Katso alue, jolla aika sijaitsee? Onko siellä muita kuvakkeita? Paikka on nimeltään Windows-järjestelmälokero. Haluatko sijoittaa Delfoi sovelluksen kuvake siellä? Haluatko kuvakkeen animoivan - tai heijastaako sovelluksesi tilaa?

Tämä olisi hyödyllistä ohjelmille, jotka ovat jättäneet toimintansa pitkään aikaan ilman käyttäjän vuorovaikutusta (taustatehtävät, joita ajat yleensä tietokoneellasi koko päivän).

Mitä voit tehdä, on saada Delphi - sovellukset näyttämään ikään kuin ne minimoivat lokeroon (sijasta) Tehtäväpalkki, oikealla Win Start -painikkeeseen) asettamalla kuvake lokeroon ja tekemällä samanaikaisesti lomakkeesi näkymätön.

Tarjotaan se

Onneksi järjestelmälokerossa toimivan sovelluksen luominen on melko helppoa - tehtävän suorittamiseen tarvitaan vain yksi (API) -toiminto, Shell_NotifyIcon.

Toiminto on määritelty ShellAPI-yksikkö ja vaatii kaksi parametria. Ensimmäinen on lippu, joka osoittaa, lisätäänkö kuvaketta, muutetaanko sitä tai poistetaanko, ja toinen on osoitin TNotifyIconData-rakenteeseen, joka sisältää kuvakkeen tiedot. Sisältää näytettävän kuvakkeen kahvan, tekstin, joka näytetään työkaluvihjeenä, kun hiiri on kuvakkeen päällä, sen ikkunan kahva, joka vastaanottaa kuvakkeen viestit, ja viestityyppi, jonka kuvake lähettää tälle ikkuna.

instagram viewer

Ensinnäkin, päämuodosi Yksityinen-osiossa laita rivi:
TrayIconData: TNotifyIconData;

tyyppi
TMainForm = luokka(TForm)
menettely FormCreate (Lähettäjä: TObject);
yksityinen
TrayIconData: TNotifyIconData;
{Yksityiset ilmoitukset}julkinen{Julkiset ilmoitukset}pää;

Sitten päämuodossasi onCreate menetelmä, alusta TrayIconData-datarakenne ja kutsu Shell_NotifyIcon-toiminto:

kanssa TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Kahva;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Sovellus. Kuvaketta. Käsitellä;
StrPCopy (szTip, Sovellus. Title);
pää;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);

TrayIconData-rakenteen Wnd-parametri osoittaa ikkunaan, joka vastaanottaa kuvakkeeseen liittyvät ilmoitussanomat.

HIcon osoittaa kuvaketta, jonka haluamme lisätä lokeroon - tässä tapauksessa käytetään Sovellusten pääkuvaketta.
SzTip pitää työkaluvinkin tekstin näytössä näkyvän kuvakkeen kohdalla - tässä tapauksessa sovelluksen otsikossa. SzTip voi sisältää enintään 64 merkkiä.
UFlags-parametri on asetettu kuvaamaan kuvake käsittelemään sovellusviestejä, käyttämään sovelluksen kuvaketta ja sen kärkeä. uCallbackMessage osoittaa sovelluksen määrittämään viestitunnisteeseen. Järjestelmä käyttää määritettyä tunnistetta ilmoitussanomiin, jotka se lähettää Wndin tunnistamaan ikkunaan, kun hiiren tapahtuma tapahtuu kuvakkeen rajaavassa suorakulmiossa. Tämä parametri asetetaan WM_ICONTRAY-vakioon, joka on määritelty lomakeyksikön rajapintaosassa, ja on yhtä suuri kuin: WM_USER + 1;

Lisäät kuvakkeen lokeroon soittamalla Shell_NotifyIcon API -toimintoon. Ensimmäinen parametri "NIM_ADD" lisää kuvakkeen lokeroalueelle. Kaksi muuta mahdollista arvoa, NIM_DELETE ja NIM_MODIFY, käytetään poistamaan tai muuttamaan kuvaketta lokerossa - näemme kuinka myöhemmin tässä artikkelissa. Toinen parametri, jonka lähetämme Shell_NotifyIconille, on alustettu TrayIconData-rakenne.

Ota yksi

Jos ajat projektisi nyt, näet kuvakkeen kellon lähellä kelloa. Huomaa kolme asiaa.

1) Ensinnäkin mitään ei tapahdu, kun napsautat (tai teet jotain muuta hiirellä) lokeroon asetetulle kuvakkeelle - emme ole vielä luoneet menettelyä (viestinkäsittelijä).
2) Toiseksi tehtäväpalkissa on painike (emme selvästi halua sitä siellä).
3) Kolmanneksi, kun suljet sovelluksesi, kuvake jää lokeroon.

Ota kaksi

Ratkaistaan ​​tämä taaksepäin. Jotta kuvake voidaan poistaa lokerosta, kun poistut sovelluksesta, sinun on soitettava uudelleen Shell_NotifyIcon, mutta NIM_DELETE on ensimmäinen parametri. Teet tämän OnDestroyssa tapahtumakäsittelijä päälomakkeelle.

menettely TMainForm. FormDestroy (Lähettäjä: TObject);
alkaa
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
pää;

Piilotamme sovelluksen (sovelluksen painike) tehtäväpalkista yksinkertaisen tempun avulla. Lisää projektiin lähdekoodiin seuraava rivi: Sovellus. ShowMainForm: = Väärä; ennen hakemusta. CreateForm (TMainForm, MainForm); E.g anna sen näyttää:

...
alkaa
Sovellus. Alustaa;
Sovellus. ShowMainForm: = Väärä;
Sovellus. CreateForm (TMainForm, MainForm);
Sovellus. Juosta;
end.

Ja lopuksi, jotta Tray-kuvake reagoi hiiren tapahtumiin, meidän on luotava viestin käsittelymenettely. Ensin julistamme viestinkäsittelymenettelyn lomakkeen ilmoituksen julkisessa osassa: menettely TrayMessage (var Msg: TMessage); viesti WM_ICONTRAY; Toiseksi tämän menettelyn määritelmä näyttää seuraavalta:

menettely TMainForm. TrayMessage (var Msg: TMessage);
begincase Msg.lParam of
WM_LBUTTONDOWN:
alkaa
ShowMessage ('Vasen painike napsautettiin
- Otetaan NÄYTÄ lomake! ');
MainForm. Näytä;
pää;
WM_RBUTTONDOWN:
alkaa
ShowMessage ('Napsauta oikeaa painiketta
- Piilotakaa lomake! ');
MainForm. Piilottaa;
pää;
pää;
pää;

Tämä menettely on suunniteltu käsittelemään vain viestiämme, WM_ICONTRAY. Se vie LParam-arvon viestirakenteesta, joka voi antaa meille hiiren tilan toimenpiteen aktivoinnin yhteydessä. Käsittelemme yksinkertaisuuden vuoksi vain vasenta hiiriä alas (WM_LBUTTONDOWN) ja oikeaa hiiriä alas (WM_RBUTTONDOWN). Kun hiiren vasen painike on alhaalla kuvakkeessa, näytämme päämuodon, kun oikeaa painiketta painetaan, piilomme sen. Tietenkin on muita hiiren syöttöviestejä, joita voit käsitellä prosessissa, kuten, painike ylös, painike kaksoisnapsauttamalla jne.

Se siitä. Nopea ja helppo. Seuraavaksi näet, kuinka animoida kuvaketta lokerossa ja kuinka se saadaan kuvastamaan sovelluksesi tilaa. Vielä enemmän näet kuinka näyttää ponnahdusvalikko kuvakkeen lähellä.