Anzeigen eines modalen TopMost-Systemmeldungsfelds mit Delphi

Bei Desktopanwendungen (Windows) a Meldungsfeld (Dialogfeld) wird verwendet, um den Benutzer der Anwendung darauf hinzuweisen, dass eine Aktion ausgeführt werden muss, dass ein Vorgang abgeschlossen wurde oder im Allgemeinen, um die Aufmerksamkeit des Benutzers zu erregen.

In Delphi gibt es verschiedene Möglichkeiten, dem Benutzer eine Nachricht anzuzeigen. Sie können entweder eine der in der RTL bereitgestellten vorgefertigten Routinen für die Anzeige von Nachrichten verwenden, z. B. ShowMessage oder InputBox. oder Sie können ein eigenes Dialogfeld erstellen (zur Wiederverwendung): CreateMessageDialog.

Ein häufiges Problem bei allen obigen Dialogfeldern ist, dass sie erfordern, dass die Anwendung aktiv ist, um dem Benutzer angezeigt zu werden. "Aktiv" bezieht sich auf eine Anwendung mit "Eingabefokus".

Wenn Sie wirklich die Aufmerksamkeit des Benutzers erregen und ihn davon abhalten möchten, etwas anderes zu tun, müssen Sie in der Lage sein, dies zu tun Ein systemmodales oberstes Meldungsfeld anzeigen, auch wenn Ihre Anwendung nicht aktiv ist.

System-Modal Top Most-Meldungsfeld

Auch wenn dies kompliziert klingen mag, ist es dies in Wirklichkeit nicht.

Da Delphi problemlos auf die meisten Windows-API-Aufrufe zugreifen kann, reicht es aus, die Windows-API-Funktion "MessageBox" auszuführen.

Wird in der Unit "windows.pas" definiert - diejenige, die standardmäßig in der uses-Klausel jedes Delphi-Formulars enthalten ist, der Nachrichtenbox Mit dieser Funktion wird ein Meldungsfeld erstellt, angezeigt und bedient. Das Meldungsfeld enthält eine anwendungsspezifische Meldung und einen Titel sowie eine beliebige Kombination aus vordefinierten Symbolen und Drucktasten.

So wird die MessageBox deklariert:

 Funktion Nachrichtenbox(

  hWnd: HWND;
  lpText,
  lpCaption: PAnsiChar;
  uTyp: Kardinal): Ganzzahl;

Der erste Parameter, hwnd, ist das Handle des Besitzerfensters des zu erstellenden Meldungsfelds. Wenn Sie ein Meldungsfeld erstellen, während ein Dialogfeld vorhanden ist, verwenden Sie ein Handle für das Dialogfeld als hWnd Parameter.

Das lpText und lpCaption Geben Sie die Beschriftung und den Meldungstext an, die im Meldungsfeld angezeigt werden.

Letzter ist der uType Parameter und ist das interessanteste. Dieser Parameter gibt den Inhalt und das Verhalten des Dialogfelds an. Dieser Parameter kann eine Kombination verschiedener Flags sein.

Beispiel: System Modal Warning Box Wenn sich das Systemdatum / die Systemzeit ändert

Schauen wir uns ein Beispiel für die Erstellung eines modalen obersten Meldungsfelds an. Sie verarbeiten die Windows-Nachricht, die an alle ausgeführten Anwendungen gesendet wird, wenn sich das Systemdatum / die Systemzeit ändert, z. B. über das Applet "Eigenschaften von Datum und Uhrzeit" in der Systemsteuerung.

Die MessageBox-Funktion wird wie folgt aufgerufen:

   Windows.MessageBox (

     Griff,

     'Dies ist eine systemmodale Nachricht' # 13 # 10 'von einer inaktiven Anwendung',

     "Eine Nachricht von einer inaktiven Anwendung!",

     MB_SYSTEMMODAL oder MB_SETFOREGROUND oder MB_TOPMOST oder MB_ICONHAND);

Das wichtigste Stück ist der letzte Parameter. Das "MB_SYSTEMMODAL oder MB_SETFOREGROUND oder MB_TOPMOST" stellt sicher, dass das Meldungsfeld systemmodal ist, ganz oben und zum Vordergrundfenster wird.

  • MB_SYSTEMMODAL Das Flag stellt sicher, dass der Benutzer auf das Meldungsfeld antworten muss, bevor er mit der Arbeit in dem durch den Parameter hWnd angegebenen Fenster fortfahren kann.
  • MB_TOPMOST flag gibt an, dass das Meldungsfeld über allen nicht übergeordneten Fenstern platziert werden soll und darüber bleiben soll, auch wenn das Fenster deaktiviert ist.
  • MB_SETFOREGROUND flag stellt sicher, dass das Meldungsfeld zum Vordergrundfenster wird.

Hier ist der vollständige Beispielcode (TForm mit dem Namen "Form1" in Unit "unit1" definiert):

 Einheit Einheit 1;

Schnittstelle

 

 Verwendet

   Windows, Nachrichten, SysUtils, Varianten, Klassen,

   Grafiken, Steuerelemente, Formulare, Dialoge, ExtCtrls;

 

 Art

   TForm1 = Klasse(TForm)

  
Privat

     Verfahren WMTimeChange (var Msg: TMessage); Botschaft WM_TIMECHANGE;

  
Öffentlichkeit

     Öffentliche Erklärungen

   Ende;

var

   Form1: TForm1;

 

 Implementierung$ R * .dfm

 

 Verfahren TForm1.WMTimeChange (var Msg: TMessage);

Start

   Windows.MessageBox (

     Griff,

     'Dies ist eine systemmodale Nachricht' # 13 # 10 'von einer inaktiven Anwendung',

     "Eine Nachricht von einer inaktiven Anwendung!",

     MB_SYSTEMMODAL oder MB_SETFOREGROUND oder MB_TOPMOST oder MB_ICONHAND);

Ende;

Ende.

Versuchen Sie, diese einfache Anwendung auszuführen. Stellen Sie sicher, dass die Anwendung minimiert ist oder mindestens eine andere Anwendung aktiv ist. Führen Sie das Applet "Eigenschaften von Datum und Uhrzeit" in der Systemsteuerung aus und ändern Sie die Systemzeit. Sobald Sie auf die Schaltfläche "Ok" (im Applet) klicken, wird das oberste modale Meldungsfeld des Systems aus Ihrer inaktiven Anwendung angezeigt.