Visualizza una finestra di messaggio modale del sistema TopMost con Delphi

Con le applicazioni desktop (Windows), a finestra di dialogo (finestra di dialogo) viene utilizzato per avvisare l'utente dell'applicazione che è necessario eseguire alcune azioni, che alcune operazioni sono state completate o, in generale, per attirare l'attenzione degli utenti.

Nel Delphi, ci sono diversi modi per visualizzare un messaggio per l'utente. È possibile utilizzare uno qualsiasi dei messaggi già pronti che visualizzano le routine fornite in RTL, come ShowMessage o InputBox; oppure puoi creare la tua finestra di dialogo (per il riutilizzo): CreateMessageDialog.

Un problema comune con tutte le finestre di dialogo sopra è che loro richiede che l'applicazione sia attiva per essere visualizzata all'utente. "Attivo" si riferisce a quando l'applicazione ha lo "stato attivo di input".

Se vuoi davvero attirare l'attenzione dell'utente e impedirgli di fare qualsiasi altra cosa, devi essere in grado di farlo visualizza una finestra di messaggio in cima al sistema modale anche quando l'applicazione non è attiva.

instagram viewer

Finestra di messaggio più in alto a livello di sistema

Anche se questo può sembrare complicato, in realtà non lo è.

Poiché Delphi può accedere facilmente alla maggior parte delle chiamate API di Windows, l'esecuzione della funzione API di Windows "MessageBox" farà il trucco.

Definito nell'unità "windows.pas" - quello incluso per impostazione predefinita nella clausola use di ogni modulo Delphi, il Casella dei messaggi La funzione crea, visualizza e gestisce una finestra di messaggio. La finestra di messaggio contiene un messaggio e un titolo definiti dall'applicazione, insieme a qualsiasi combinazione di icone e pulsanti predefiniti.

Ecco come viene dichiarato MessageBox:

funzione Casella dei messaggi(

hWnd: HWND;
lpText,
lpCaption: PAnsiChar;
uTipo: cardinale): intero;

Il primo parametro, hwnd, è l'handle della finestra del proprietario della finestra di messaggio da creare. se si crea una finestra di messaggio mentre è presente una finestra di dialogo, utilizzare un handle per la finestra di dialogo come hWnd parametro.

Il lpText e lpCaption specifica la didascalia e il testo del messaggio che viene visualizzato nella finestra di messaggio.

L'ultimo è il uType parametro ed è il più interessante. Questo parametro consente di specificare il contenuto e il comportamento della finestra di dialogo. Questo parametro può essere una combinazione di vari flag.

Esempio: casella di avviso modale del sistema quando la data / ora del sistema cambia

Diamo un'occhiata a un esempio di creazione di una finestra di messaggio più in alto modale di sistema. avrete gestire il messaggio di Windows che viene inviato a tutte le applicazioni in esecuzione quando il modifiche alla data / ora del sistema—Per esempio usando l'applet del pannello di controllo "Proprietà data e ora".

La funzione MessageBox verrà chiamata come:

 Finestre. Casella dei messaggi(

 maniglia,

 "Questo è un messaggio modale di sistema" # 13 # 10 "da un'applicazione inattiva",

 "Un messaggio da un'applicazione inattiva!",

 MB_SYSTEMMODAL o MB_SETFOREGROUND o MB_TOPMOST o MB_ICONHAND);

Il pezzo più importante è l'ultimo parametro. "MB_SYSTEMMODAL o MB_SETFOREGROUND o MB_TOPMOST" garantisce che la finestra di messaggio sia modale di sistema, in alto e diventa la finestra in primo piano.

  • MB_SYSTEMMODAL flag assicura che l'utente debba rispondere alla finestra di messaggio prima di continuare a lavorare nella finestra identificata dal parametro hWnd.
  • MB_TOPMOST flag specifica che la finestra di messaggio deve essere posizionata sopra tutte le finestre non più in alto e deve rimanere al di sopra di esse, anche quando la finestra è disattivata.
  • MB_SETFOREGROUND flag assicura che la finestra di messaggio diventi la finestra in primo piano.

Ecco il codice di esempio completo (TForm denominato "Form1" definito nell'unità "unit1"):

unità Unità 1;

interfaccia


usi

 Windows, Messaggi, SysUtils, Varianti, Classi,

 Grafica, controlli, moduli, finestre di dialogo, ExtCtrls;


genere

 TForm1 = classe(TForm)

privato

procedura WMTimeChange (var Msg: TMessage); Messaggio WM_TIMECHANGE;

pubblico

{Dichiarazioni pubbliche}

fine;

var

 Form1: TForm1;


implementazione{$ R * .dfm}


procedura TForm1.WMTimeChange (var Msg: TMessage);

inizio

 Finestre. Casella dei messaggi(

 maniglia,

 "Questo è un messaggio modale di sistema" # 13 # 10 "da un'applicazione inattiva",

 "Un messaggio da un'applicazione inattiva!",

 MB_SYSTEMMODAL o MB_SETFOREGROUND o MB_TOPMOST o MB_ICONHAND);

fine;

fine.

Prova a eseguire questa semplice applicazione. Assicurati che l'applicazione sia ridotta a icona o che almeno un'altra applicazione sia attiva. Eseguire l'applet "Proprietà data e ora" sul pannello di controllo e modificare l'ora di sistema. Non appena si preme il pulsante "Ok" (sul applet) verrà visualizzata la finestra di messaggio più in alto modale di sistema dall'applicazione inattiva.

instagram story viewer