Met desktop (Windows) applicaties, a bericht (dialoogvenster) wordt gebruikt om de gebruiker van de applicatie te waarschuwen dat er actie moet worden ondernomen, dat een bewerking is voltooid of, in het algemeen, om de aandacht van gebruikers te trekken.
In Delphizijn er verschillende manieren om een bericht aan de gebruiker weer te geven. U kunt een van de kant-en-klare routines voor het weergeven van berichten in de RTL gebruiken, zoals ShowMessage of InputBox; of u kunt uw eigen dialoogvenster maken (voor hergebruik): CreateMessageDialog.
Een veelvoorkomend 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 wil voorkomen dat ze iets anders doen, moet je dat kunnen een systeemmodaal bovenste berichtvenster weergeven, zelfs als uw toepassing niet actief is.
System-Modal Top Most Message Box
Hoewel dit misschien ingewikkeld klinkt, is het dat in werkelijkheid niet.
Aangezien Delphi gemakkelijk toegang heeft tot de meeste Windows API-aanroepen, zal het uitvoeren van de "MessageBox" Windows API-functie de juiste oplossing zijn.
Gedefinieerd in de "windows.pas" -eenheid - degene die standaard is opgenomen in de gebruiksclausule van elk Delphi-formulier, de Berichten box functie creëert, toont en bedient een berichtenvenster. Het berichtvenster bevat een door de applicatie gedefinieerd bericht en titel, samen met elke combinatie van vooraf gedefinieerde pictogrammen en drukknoppen.
Hier 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 eigenaarsvenster van het berichtvenster dat moet worden gemaakt. als u een berichtvenster maakt terwijl er een dialoogvenster aanwezig is, gebruikt u een handvat voor het dialoogvenster als de hWnd parameter.
De lpText en lpCaption geef het bijschrift en de berichttekst op die in het berichtvenster wordt weergegeven.
Als laatste is het uType parameter en is het meest interessant. Deze parameter specificeert de inhoud en het gedrag van het dialoogvenster. Deze parameter kan een combinatie zijn van verschillende vlaggen.
Voorbeeld: Systeemmodaal waarschuwingsvenster wanneer de systeemdatum / -tijd verandert
Laten we een voorbeeld bekijken van het maken van een systeemmodaal bovenste berichtvenster. Je zult het Windows-bericht afhandelen dat wordt verzonden naar alle actieve toepassingen wanneer de systeem datum / tijd verandert—Bijvoorbeeld met behulp van de applet "Configuratie van datum en tijd".
De MessageBox-functie wordt aangeroepen als:
Ramen. Berichten box(
omgaan met,
'Dit is een systeemmodaal bericht' # 13 # 10 'vanuit een inactieve toepassing',
'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 berichtvenster systeemmodaal is, bovenaan en het voorgrondvenster wordt.
- MB_SYSTEMMODAL vlag zorgt ervoor dat de gebruiker moet reageren op het berichtvenster voordat hij verder kan werken in het venster dat wordt aangeduid met de parameter hWnd.
- MB_TOPMOST vlag geeft aan dat het berichtvenster boven alle niet-bovenste vensters moet worden geplaatst en erboven moet blijven, zelfs wanneer het venster is uitgeschakeld.
- MB_SETFOREGROUND vlag zorgt ervoor dat het berichtvenster het voorgrondvenster wordt.
Hier is de volledige voorbeeldcode (TForm genaamd "Form1" gedefinieerd in eenheid "unit1"):
eenheid Hoofdstuk 1;
koppel
toepassingen
Windows, Berichten, SysUtils, Varianten, Klassen,
Graphics, Controls, Forms, Dialogs, ExtCtrls;
type
TForm1 = klasse(TForm)
privaat
procedure WMTimeChange (var Msg: TMessage); bericht WM_TIMECHANGE;
openbaar
{Openbare verklaringen}
einde;
var
Form1: TForm1;
implementatie{$ R * .dfm}
procedure TForm1.WMTimeChange (var Msg: TMessage);
beginnen
Ramen. Berichten box(
omgaan met,
'Dit is een systeemmodaal bericht' # 13 # 10 'vanuit een inactieve toepassing',
'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 tenminste dat een andere applicatie actief is. Voer de applet "Eigenschappen voor datum en tijd" uit en wijzig de systeemtijd. Zodra je op de "Ok" knop drukt (op de applet) het systeemmodale bovenste berichtvenster van uw inactieve toepassing wordt weergegeven.