Vis en TopMost systemmodal meddelelsesboks med Delphi

Med desktop-applikationer (Windows), a besked (dialog) boksen bruges til at advare brugeren af ​​applikationen om, at der skal udføres nogle handlinger, at en eller anden handling er afsluttet eller generelt for at få brugernes opmærksomhed.

I Delphi, er der flere måder at vise en besked til brugeren på. Du kan enten bruge en hvilken som helst af de færdige meddelelser, der viser rutiner, der leveres i RTL, som ShowMessage eller InputBox; eller du kan oprette din egen dialogboks (til genbrug): CreateMessageDialog.

Et almindeligt problem med alle ovenstående dialogbokse er, at de kræver, at applikationen er aktiv for at blive vist for brugeren. "Aktiv" refererer til, når din applikation har "inputfokus."

Hvis du virkelig ønsker at fange brugerens opmærksomhed og forhindre dem i at gøre noget andet, skal du være i stand til det vis en systemmodal øverste meddelelsesboks, selv når din applikation ikke er aktiv.

System-modal top mest meddelelsesboks

Selvom dette muligvis lyder kompliceret, er det faktisk ikke.

instagram viewer

Da Delphi nemt kan få adgang til de fleste af Windows API-opkald, udfører funktionen "MessageBox" Windows API funktionen.

Defineret i enhed "windows.pas" - den, der som standard er inkluderet i brugsklausulen i hver Delphi-form, MessageBox funktion opretter, viser og betjener en meddelelsesboks. Meddelelsesfeltet indeholder en applikationsdefineret meddelelse og titel sammen med enhver kombination af foruddefinerede ikoner og trykknapper.

Sådan erklæres MessageBox:

fungere MessageBox (

hWnd: HWND;
lpText,
lpBetegnelse: PAnsiChar;
uType: Cardinal): heltal;

Den første parameter, HWND, er håndtaget i ejervinduet i den meddelelsesboks, der skal oprettes. Hvis du opretter en meddelelsesboks, mens en dialogboks er til stede, skal du bruge et håndtag til dialogboksen som hWnd parameter.

Det lpText og lpCaption angiv billedtekst og meddelelsesteksten, der vises i meddelelsesfeltet.

Sidste er uType parameter og er den mest interessante. Denne parameter specificerer indholdet og opførslen i dialogboksen. Denne parameter kan være en kombination af forskellige flag.

Eksempel: Systemmodal advarselboks, når systemdatoen / klokkeslættet ændres

Lad os se på et eksempel på oprettelse af en systemmodal øverste meddelelsesboks. Du vil håndtere Windows-beskeden der sendes til alle de kørende applikationer, når ændringer i systemdato / -tid— For eksempel ved hjælp af applet'en "Dato og tid" -kontrolpanel.

MessageBox-funktionen kaldes som:

 Windows. MessageBox (

 håndtere,

 'Dette er en systemmodal meddelelse' # 13 # 10 'fra en inaktiv applikation',

 'En meddelelse fra en inaktiv applikation!',

 MB_SYSTEMMODAL eller MB_SETFOREGROUND eller MB_TOPMOST eller MB_ICONHAND);

Det vigtigste stykke er den sidste parameter. "MB_SYSTEMMODAL eller MB_SETFOREGROUND eller MB_TOPMOST" sikrer, at meddelelsesboksen er systemmodal, øverste mest og bliver forgrundsvinduet.

  • MB_SYSTEMMODAL flag sikrer, at brugeren skal svare på meddelelsesfeltet, før han fortsætter med at arbejde i det vindue, der er identificeret med hWnd-parameteren.
  • MB_TOPMOST flag angiver, at meddelelsesfeltet skal placeres over alle ikke-øverste vinduer og skal forblive over dem, selv når vinduet er deaktiveret.
  • MB_SETFOREGROUND flag sikrer, at meddelelsesfeltet bliver forgrundsvinduet.

Her er den fulde eksempelkode (TForm med navnet "Form1" defineret i enhed "enhed1"):

enhed Enhed 1;

grænseflade


anvendelser

 Windows, meddelelser, SysUtils, varianter, klasser,

 Grafik, kontrol, formularer, dialoger, ExtCtrls;


type

 TForm1 = klasse(TForm)

privat

procedure WMTimeChange (var Msg: TMessage); besked WM_TIMECHANGE;

offentlig

{Offentlige erklæringer}

ende;

Var

 Form1: TForm1;


implementering{$ R * .dfm}


procedure TForm1.WMTimeChange (var Msg: TMessage);

begynde

 Windows. MessageBox (

 håndtere,

 'Dette er en systemmodal meddelelse' # 13 # 10 'fra en inaktiv applikation',

 'En meddelelse fra en inaktiv applikation!',

 MB_SYSTEMMODAL eller MB_SETFOREGROUND eller MB_TOPMOST eller MB_ICONHAND);

ende;

ende.

Prøv at køre denne enkle applikation. Sørg for, at applikationen er minimeret eller i det mindste, at en anden applikation er aktiv. Kør applet'en "Dato og tid" -kontrolpanel, og skift systemtid. Så snart du trykker på knappen "Ok" (på applet) vises det systemmodale øverste meddelelsesfelt fra din inaktive applikation.