Visa en TopMost systemmodal meddelandelåda med Delphi

Med stationära (Windows) -applikationer, a meddelande (dialogruta) används för att varna användaren av applikationen om att vissa åtgärder måste vidtas, att någon åtgärd genomfördes eller i allmänhet för att få användarnas uppmärksamhet.

I Delphi, det finns flera sätt att visa ett meddelande till användaren. Du kan antingen använda något av de färdiga meddelanden som visar rutiner som tillhandahålls i RTL, som ShowMessage eller InputBox; eller så kan du skapa en egen dialogruta (för återanvändning): CreateMessageDialog.

Ett vanligt problem med alla ovanstående dialogrutor är att de kräver att applikationen är aktiv för att visas för användaren. "Aktiv" avser när din applikation har "inmatningsfokus."

Om du verkligen vill fånga användarens uppmärksamhet och hindra dem från att göra något annat måste du kunna visa en systemmodal översta meddelanderuta även om din applikation inte är aktiv.

System-modal topp mest meddelanderuta

Även om detta kanske låter komplicerat, så är det verkligen inte.

instagram viewer

Eftersom Delphi enkelt kan komma åt de flesta av Windows API-samtal kommer att utföra "MessageBox" Windows API-funktionen göra susen.

Definierad i enheten "windows.pas" - den som standard ingår i användningsklausulen för varje Delphi-form, Meddelandebox funktionen skapar, visar och använder en meddelanderuta. Meddelanderutan innehåller ett applikationsdefinierat meddelande och titel, tillsammans med valfri kombination av fördefinierade ikoner och tryckknappar.

Så här förklaras MessageBox:

fungera Meddelandebox(

hWnd: HWND;
lpText,
lpCaption: PAnsiChar;
uType: kardinal): heltal;

Den första parametern, hwnd, är handtaget i ägarfönstret i meddelanderutan som ska skapas. Om du skapar en meddelanderuta medan en dialogruta finns, använd ett handtag till dialogrutan som hWnd parameter.

De lpText och lpCaption ange bildtexten och meddelandeteksten som visas i meddelanderutan.

Senast är uType parameter och är den mest intressanta. Denna parameter specificerar innehållet och beteendet i dialogrutan. Denna parameter kan vara en kombination av olika flaggor.

Exempel: Systemmodalvarningslåda när systemdatum / tid ändras

Låt oss ta en titt på ett exempel på att skapa en systemmodal översta meddelanderuta. du kommer hantera Windows-meddelandet som skickas till alla löpande applikationer när systemdatum / tid ändras— Till exempel med hjälp av appletten "Datum och tid" -kontrollpanelen.

MessageBox-funktionen kommer att kallas som:

 Windows. Meddelandebox(

 hantera,

 "Detta är ett systemmodellt meddelande" # 13 # 10 "från en inaktiv applikation",

 "Ett meddelande från en inaktiv applikation!",

 MB_SYSTEMMODAL eller MB_SETFOREGROUND eller MB_TOPMOST eller MB_ICONHAND);

Den viktigaste delen är den sista parametern. "MB_SYSTEMMODAL eller MB_SETFOREGROUND eller MB_TOPMOST" säkerställer att meddelanderutan är systemmodal, överst mest och blir förgrundsfönstret.

  • MB_SYSTEMMODAL flagg säkerställer att användaren måste svara på meddelanderutan innan han fortsätter arbeta i fönstret identifierat med hWnd-parametern.
  • MB_TOPMOST flagg anger att meddelanderutan ska placeras ovanför alla icke-översta fönster och ska hålla sig ovanför dem, även om fönstret är inaktiverat.
  • MB_SETFOREGROUND flagga säkerställer att meddelandelådan blir förgrundsfönstret.

Här är fullständig exempelkod (TForm med namnet "Form1" definierad i enhet "enhet1"):

enhet Enhet 1;

gränssnitt


användningar

 Windows, meddelanden, SysUtils, varianter, klasser,

 Grafik, kontroller, formulär, dialoger, ExtCtrls;


typ

 TForm1 = klass(TForm)

privat

procedur WMTimeChange (var Msg: TMessage); meddelande WM_TIMECHANGE;

offentlig

{Offentliga förklaringar}

slutet;

var

 Form1: TForm1;


genomförande{$ R * .dfm}


procedur TForm1.WMTimeChange (var Msg: TMessage);

Börja

 Windows. Meddelandebox(

 hantera,

 "Detta är ett systemmodellt meddelande" # 13 # 10 "från en inaktiv applikation",

 "Ett meddelande från en inaktiv applikation!",

 MB_SYSTEMMODAL eller MB_SETFOREGROUND eller MB_TOPMOST eller MB_ICONHAND);

slutet;

slutet.

Prova att köra den här enkla applikationen. Se till att applikationen är minimerad eller åtminstone att någon annan applikation är aktiv. Kör appletten "Datum och tid" på kontrollpanelen och ändra systemtiden. Så snart du trycker på "Ok" -knappen (på applet) Systemmodalens översta meddelanderuta från din inaktiva applikation visas.

instagram story viewer