Näytä TopMost-järjestelmän modulaarinen viestiruutu Delphin kanssa

Työpöytä (Windows) -sovellusten kanssa, a viesti (valintaikkuna) -sovellusta käytetään varoittamaan sovelluksen käyttäjää siitä, että jotkut toimenpiteet on toteutettava, että jokin toimenpide on suoritettu loppuun, tai yleensä käyttäjien huomion saamiseksi.

Sisään Delfoi, on olemassa useita tapoja näyttää viesti käyttäjälle. Voit joko käyttää mitä tahansa RTL: n tarjoamista valmiista viestinäyttörutiineista, kuten ShowMessage tai InputBox; tai voit luoda oman valintaikkunan (uudelleenkäyttöön): CreateMessageDialog.

Kaikkien yllä olevien valintaikkunoiden yleinen ongelma on, että ne vaatii sovelluksen olevan aktiivinen, jotta se näytetään käyttäjälle. "Aktiivinen" tarkoittaa, kun sovelluksessasi on "syöttö fokus".

Jos haluat todella kiinnittää käyttäjän huomion ja estää käyttäjää tekemästä mitään muuta, sinun on kyettävä näytä järjestelmämodaalinen ylin viestiruutu, vaikka sovelluksesi ei olisi aktiivinen.

Järjestelmämuotoinen suosituin viestiruutu

Vaikka tämä saattaa kuulostaa monimutkaiselta, todellisuudessa se ei ole.

instagram viewer

Koska Delphi pääsee helposti useimpiin Windows API -kutsuihin, "MessageBox" Windows API -toiminnon suorittaminen tekee tempun.

Määritetty "Windows.pas" -yksikössä - joka sisältyy oletuksena jokaisen Delphi-muodon käyttölausekkeeseen, Viestilaatikko -toiminto luo, näyttää ja käyttää viestiruutua. Viestiruutu sisältää sovelluksen määrittelemän viestin ja otsikon, samoin kuin minkä tahansa yhdistelmän ennalta määritettyjä kuvakkeita ja painikkeita.

Viestilaatikko julistetaan seuraavasti:

toimia Viestilaatikko(

hWnd: HWND;
lpText,
lpCaption: PAnsiChar;
uType: kardinaali): kokonaisluku;

Ensimmäinen parametri, hwnd, on luotavan viestiruudun omistajaikkunan kahva. Jos luot viestiruudun valintaikkunan ollessa käytössä, käytä valintaikkunan kahvaa hWnd parametri.

lpText ja lpCaption määritä tekstitys ja viestiteksti, joka näkyy viestiruudussa.

Viimeinen on uType parametri ja on mielenkiintoisin. Tämä parametri määrittelee valintaikkunan sisällön ja toiminnan. Tämä parametri voi olla yhdistelmä erilaisia ​​lippuja.

Esimerkki: Järjestelmän modaalien varoitusruutu, kun järjestelmän päivämäärä / aika muuttuu

Katsotaanpa esimerkkiä järjestelmän modaalisen ylin viestiruudun luomisesta. Huomaat käsittele Windows-viesti joka lähetetään kaikkiin käynnissä oleviin sovelluksiin, kun järjestelmän päiväys / aika muuttuvat— Esimerkiksi Ohjauspaneelin Päivämäärä- ja aikaominaisuudet -sovelluksen avulla.

MessageBox-toimintoa kutsutaan nimellä:

 Windows. Viestilaatikko(

 käsitellä,

 'Tämä on järjestelmän modulaarinen viesti' # 13 # 10 'ei-aktiivisesta sovelluksesta',

 'Viesti epäaktiiviselta sovellukselta!',

 MB_SYSTEMMODAL tai MB_SETFOREGROUND tai MB_TOPMOST tai MB_ICONHAND);

Tärkein pala on viimeinen parametri. "MB_SYSTEMMODAL tai MB_SETFOREGROUND tai MB_TOPMOST" varmistaa, että viestiruutu on järjestelmän mukainen, eniten ja siitä tulee etualalla oleva ikkuna.

  • MB_SYSTEMMODAL lippu varmistaa, että käyttäjän on vastattava viestiruutuun ennen työn jatkamista hWnd-parametrilla tunnistetussa ikkunassa.
  • MB_TOPMOST lippu ilmoittaa, että viestiruutu tulee sijoittaa kaikkien ylimpien ikkunoiden yläpuolelle ja pysyä niiden yläpuolella, jopa ikkunan ollessa pois käytöstä.
  • MB_SETFOREGROUND lippu varmistaa, että viestiruudusta tulee etualalla oleva ikkuna.

Tässä on täydellinen esimerkkikoodi (TForm nimeltään "Form1" määritelty yksikössä "unit1"):

yksikkö Kappale 1;

käyttöliittymä


käyttötarkoitukset

 Windows, Viestit, SysUtils, variantit, luokat,

 Grafiikka, Ohjaimet, Lomakkeet, Dialogs, ExtCtrls;


tyyppi

 TForm1 = luokka(TForm)

yksityinen

menettely WMTimeChange (var Msg: TMessage); viesti WM_TIMECHANGE;

julkinen

{Julkiset ilmoitukset}

pää;

var

 Muoto 1: TForm1;


toteutus{$ R * .dfm}


menettely TForm1.WMTimeChange (var Msg: TMessage);

alkaa

 Windows. Viestilaatikko(

 käsitellä,

 'Tämä on järjestelmän modulaarinen viesti' # 13 # 10 'ei-aktiivisesta sovelluksesta',

 'Viesti epäaktiiviselta sovellukselta!',

 MB_SYSTEMMODAL tai MB_SETFOREGROUND tai MB_TOPMOST tai MB_ICONHAND);

pää;

pää.

Kokeile suorittaa tämä yksinkertainen sovellus. Varmista, että sovellus on minimoitu tai ainakin, että jokin muu sovellus on aktiivinen. Suorita "Päivämäärä- ja aikaominaisuudet" Ohjauspaneelin sovelma ja muuta järjestelmän aikaa. Heti kun painat "Ok" - painiketta ( applet) aktiivisen sovelluksen järjestelmän modaalinen ylin viestiruutu tulee näkyviin.