Parodykite „TopMost“ sistemos modų pranešimų dėžutę su „Delphi“

Naudodami darbalaukio („Windows“) programas, a pranešimo (dialogo) langas naudojamas įspėti programos vartotoją apie tai, kad reikia imtis kokių nors veiksmų, kad tam tikra operacija buvo atlikta, arba iš esmės atkreipti vartotojo dėmesį.

Į Delfi, yra keli pranešimo pateikimo vartotojui būdai. Galite naudoti bet kurį iš paruoštų pranešimų rodymo rutinų, pateiktų RTL, pvz., „ShowMessage“ arba „InputBox“; arba galite sukurti savo dialogo langą (pakartotiniam naudojimui): CreateMessageDialog.

Bendra visų aukščiau išvardytų dialogo langų problema yra ta, kad jie yra reikalauti, kad programa būtų aktyvi, kad būtų rodoma vartotojui. „Aktyvus“ reiškia, kai jūsų programoje yra „įvesties dėmesys“.

Jei norite iš tikrųjų patraukti vartotojo dėmesį ir neleisti jam daugiau nieko daryti, turite mokėti parodykite aukščiausią sistemos modulio pranešimų laukelį, net kai jūsų programa nėra aktyvi.

„System-Modal Top Most Message Box“

Nors tai gali atrodyti sudėtinga, iš tikrųjų taip nėra.

Kadangi „Delphi“ gali lengvai pasiekti daugumą „Windows API“ skambučių, įvykdydamas „Windows API“ funkcijos „MessageBox“ funkciją, padarysi apgaulę.

instagram viewer

Apibrėžtas skyriuje „Windows.pas“ - pagal nutylėjimą įtrauktas į kiekvienos „Delphi“ formos naudojimo sąlygą, Žinučių dėžutė funkcija sukuria, rodo ir valdo pranešimų dėžutę. Pranešimų laukelyje yra programos apibrėžtas pranešimas ir pavadinimas, taip pat bet koks iš anksto nustatytų piktogramų ir mygtukų derinys.

Štai kaip skelbiama „MessageBox“ deklaracija:

funkcija Žinučių dėžutė(

hWnd: HWND;
lpText,
lpCaption: PAnsiChar;
uType: kardinolas): sveikasis skaičius;

Pirmasis parametras, hwnd, yra sukuriamo pranešimų lango savininko lango rankena. Jei kuriate pranešimų langą, kai yra dialogo langas, naudokite dialogo lango rankenėlę kaip hWnd parametras.

lpText ir lpCaption nurodykite antraštę ir pranešimo tekstą, rodomą pranešimų laukelyje.

Paskutinis yra uType parametras ir yra pats įdomiausias. Šis parametras nurodo dialogo lango turinį ir elgseną. Šis parametras gali būti įvairių vėliavų derinys.

Pavyzdys: Sistemos modulio įspėjimo langas, kai keičiasi sistemos data / laikas

Pažvelkime į viršutinio sistemos modulio pranešimų lango kūrimo pavyzdį. Jūs tvarkyti „Windows“ pranešimą kuri siunčiama į visas veikiančias programas, kai sistemos datos / laiko pokyčiai- pavyzdžiui, naudojant „Datos ir laiko ypatybes“, valdymo skydelio programėlę.

„MessageBox“ funkcija bus vadinama taip:

 „Windows“. Žinučių dėžutė(

 rankena,

 'Tai sistemos modus pranešimas' Nr. 13 # 10 'iš neaktyvios programos',

 „Neaktyvios programos pranešimas!“,

 MB_SYSTEMMODAL arba MB_SETFOREGROUND arba MB_TOPMOST arba MB_ICONHAND);

Svarbiausias kūrinys yra paskutinis parametras. „MB_SYSTEMMODAL arba MB_SETFOREGROUND arba MB_TOPMOST“ užtikrina, kad pranešimų dėžutė yra sistemos modulio, viršuje ir tampa pagrindiniu langu.

  • MB_SYSTEMMODAL vėliava užtikrina, kad vartotojas turi atsakyti į pranešimo laukelį prieš tęsdamas darbą lange, kurį nurodo „hWnd“ parametras.
  • MB_TOPMOST vėliava nurodo, kad pranešimo laukelis turėtų būti virš visų ne viršutinių langų ir likti virš jų, net kai langas yra išjungtas.
  • MB_SETFOREGROUND vėliava užtikrina, kad pranešimų laukas taptų pagrindiniu planu.

Čia yra visas pavyzdžio kodas (TForm pavadinimu „Form1“, apibrėžtu „unit1“ vienetu):

vienetas 1 blokas;

sąsaja


naudoja

 „Windows“, „Messages“, „SysUtils“, variantai, klasės,

 Grafika, Valdikliai, formos, dialogai, ExtCtrls;


tipo

 TForm1 = klasė(TForm)

privatus

procedūra WMTimeChange (var Msg: TMessage); žinutė WM_TIMECHANGE;

viešai

{Vieši pareiškimai}

galas;

var

 1 forma: TForm1;


įgyvendinimas{$ R * .dfm}


procedūra TForm1.WMTimeChange (var Msg: TMessage);

prasideda

 „Windows“. Žinučių dėžutė(

 rankena,

 'Tai sistemos modus pranešimas' Nr. 13 # 10 'iš neaktyvios programos',

 „Neaktyvios programos pranešimas!“,

 MB_SYSTEMMODAL arba MB_SETFOREGROUND arba MB_TOPMOST arba MB_ICONHAND);

galas;

galas.

Pabandykite paleisti šią paprastą programą. Įsitikinkite, kad programa sumažinta iki minimumo, ar bent jau aktyvi kokia nors kita programa. Paleiskite „Datos ir laiko ypatybės“ valdymo skydelio programėlę ir pakeiskite sistemos laiką. Kai tik paspausite mygtuką "Gerai" (ant programėlė), bus rodomas neaktyvios programos modulio viršutinis pranešimų langas.