Med stationära (Windows) -applikationer, a meddelande (dialogruta) används för att varna användaren av applikationen att vissa åtgärder måste vidtas, att någon åtgärd slutfördes eller i allmänhet för att få användarnas uppmärksamhet.
I Delphi finns det flera sätt att visa ett meddelande till användaren. Du kan antingen använda något av de färdiga meddelandena som visar rutiner som finns på 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.
Även om detta kanske låter komplicerat, så är det verkligen inte.
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 ingår som standard 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(
Den första parametern, hwnd, är handtaget i ägarfönstret i den meddelanderuta 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.
Låt oss ta en titt på ett exempel på att skapa en systemmodal översta meddelanderuta. Du hanterar Windows-meddelandet som skickas till alla löpande applikationer när systemdatum / tid ändras - till exempel med hjälp av applet-kontrollpanelen "Datum och tid".
MessageBox-funktionen kommer att kallas som:
Windows.MessageBox (
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.
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.MessageBox (
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å appletten) visas systemmodalens översta meddelanderuta från din inaktiva applikation.