Hoe een TopMost systeem-modale berichtenbox met Delphi weer te geven

Met bureaubladtoepassingen (Windows), a bericht (dialoogvenster) wordt gebruikt om de gebruiker van de applicatie te waarschuwen dat een actie moet worden ondernomen, dat een bewerking is voltooid of, in het algemeen, om de aandacht van gebruikers te trekken.

In Delphi zijn er verschillende manieren om een ​​bericht aan de gebruiker weer te geven. U kunt een van de kant-en-klare berichten weergeven die in de RTL worden aangeboden, zoals ShowMessage of InputBox; of u kunt uw eigen dialoogvenster maken (voor hergebruik): CreateMessageDialog.

Een veel voorkomend probleem met alle bovenstaande dialoogvensters is dat ze vereisen dat de applicatie actief is om aan de gebruiker te worden getoond. "Actief" verwijst naar wanneer uw toepassing de "invoerfocus" heeft.

Als je echt de aandacht van de gebruiker wilt trekken en wilt voorkomen dat hij iets anders doet, moet je dat kunnen geef een systeem-modaal bovenste berichtenvak weer, zelfs wanneer uw toepassing niet actief is.

System-Modal Top Meest berichtenvak

Hoewel dit misschien ingewikkeld klinkt, is het dat in werkelijkheid niet.

Aangezien Delphi gemakkelijk toegang heeft tot de meeste Windows API-aanroepen, is het uitvoeren van de "MessageBox" Windows API-functie voldoende.

Gedefinieerd in de eenheid "windows.pas" - degene die standaard is opgenomen in de gebruiksclausule van elk Delphi-formulier, de Berichten box functie creëert, toont en bedient een berichtvenster. Het berichtenvak bevat een door de toepassing gedefinieerd bericht en titel, samen met een combinatie van vooraf gedefinieerde pictogrammen en drukknoppen.

Dit is hoe de MessageBox wordt verklaard:

 functie Berichten box(

  hWnd: HWND;
  lpText,
  lpCaption: PAnsiChar;
  uType: Cardinal): geheel getal;

De eerste parameter, hwnd, is het handvat van het eigenaarvenster van het te maken berichtenvak. Als u een berichtvenster maakt terwijl er een dialoogvenster aanwezig is, gebruikt u een greep naar het dialoogvenster als de hWnd parameter.

De lpText en lpCaption geef het bijschrift en de berichttekst op die in het berichtvak wordt weergegeven.

Laatste is de uType parameter en is het meest interessant. Deze parameter geeft de inhoud en het gedrag van het dialoogvenster aan. Deze parameter kan een combinatie van verschillende vlaggen zijn.

Voorbeeld: System Modal Warning Box Wanneer de systeemdatum / -tijd verandert

Laten we een voorbeeld bekijken van het maken van een systeemmodaal bovenste berichtenvak. Je verwerkt het Windows-bericht dat naar alle actieve toepassingen wordt verzonden wanneer de systeemdatum / -tijd verandert, bijvoorbeeld met behulp van de applet "Datum- en tijdeigenschappen".

De MessageBox-functie wordt genoemd als:

   Windows.MessageBox (

     omgaan met,

     'Dit is een systeemmodaal bericht' # 13 # 10'van een inactieve applicatie ',

     'Een bericht van een inactieve applicatie!',

     MB_SYSTEMMODAL of MB_SETFOREGROUND of MB_TOPMOST of MB_ICONHAND);

Het belangrijkste stuk is de laatste parameter. De "MB_SYSTEMMODAL of MB_SETFOREGROUND of MB_TOPMOST" zorgt ervoor dat het berichtenvak systeemmodaal is, bovenaan en wordt het voorgrondvenster.

  • MB_SYSTEMMODAL vlag zorgt ervoor dat de gebruiker op het berichtenvak moet reageren voordat hij verder kan werken in het venster dat wordt geïdentificeerd door de parameter hWnd.
  • MB_TOPMOST vlag geeft aan dat het berichtenvak boven alle niet-bovenste vensters moet worden geplaatst en erboven moet blijven, zelfs wanneer het venster is gedeactiveerd.
  • MB_SETFOREGROUND vlag zorgt ervoor dat het berichtenvenster het voorgrondvenster wordt.

Hier is de volledige voorbeeldcode (TForm met de naam "Form1" gedefinieerd in eenheid "unit1"):

 eenheid Hoofdstuk 1;

koppel

 

 toepassingen

   Windows, berichten, SysUtils, varianten, klassen,

   Afbeeldingen, besturingselementen, formulieren, dialoogvensters, ExtCtrls;

 

 type

   TForm1 = klasse(TForm)

  
privaat

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

  
openbaar

     Publieke verklaringen

   einde;

var

   Form1: TForm1;

 

 implementatie$ R * .dfm

 

 procedure TForm1.WMTimeChange (var Msg: TMessage);

beginnen

   Windows.MessageBox (

     omgaan met,

     'Dit is een systeemmodaal bericht' # 13 # 10'van een inactieve applicatie ',

     'Een bericht van een inactieve applicatie!',

     MB_SYSTEMMODAL of MB_SETFOREGROUND of MB_TOPMOST of MB_ICONHAND);

einde;

einde.

Probeer deze eenvoudige applicatie uit te voeren. Zorg ervoor dat de applicatie geminimaliseerd is of dat tenminste een andere applicatie actief is. Voer de applet "Datum- en tijdeigenschappen" uit en wijzig de systeemtijd. Zodra u op de knop "OK" (op de applet) drukt, wordt het bovenste systeemvak van uw inactieve toepassing weergegeven.