Come faccio a sapere se la mia applicazione Delphi ha attualmente una finestra modale?
-
08-07-2019 - |
Domanda
Ho un timer in esecuzione nella mia applicazione MDI Delphi e vorrei usarlo per far apparire un messaggio se qualcosa cambia in background. Ma non voglio che quel messaggio appaia quando l'applicazione ha una finestra di dialogo modale in primo piano perché l'utente non può farci nulla.
Quindi quello che vorrei sapere è come posso verificare l'esistenza di una finestra di dialogo modale nella mia applicazione?
Soluzione
Puoi provare con questo codice:
var
ActForm: TCustomForm;
begin
ActForm := Screen.ActiveForm;
if (ActForm = nil) or not (fsModal in ActForm.FormState) then begin
end;
end;
Ho provato con Delphi 4, funziona per me.
[EDIT]: Ma dovresti davvero pensare se spuntare una forma e rubare il focus è una buona idea. Dipende dalla tua applicazione, ma se un utente sta attualmente inserendo qualcosa in un campo di modifica o sta facendo qualcosa con il mouse, ciò potrebbe interrompere il flusso di lavoro.
Altri suggerimenti
Dal Delphi 2005 hai un ModalLevel proprietà su TApplication. Conta il numero di moduli modali aperti nell'applicazione.
Forse la soluzione è effettivamente far apparire un suggerimento che non ruba il focus. Un suggerimento cliccabile da qualche parte visibile, ma non troppo invasivo. Pertanto, se l'utente desidera intervenire, può o può terminare ciò che stava facendo, quindi agire. O forse ignoralo del tutto.
usa AnyPopup ()
Informazioni su GetLastActivePopup (). Potrebbe restituire un valore uguale al parametro hWnd quando
- La finestra identificata da hWnd è stata attiva di recente.
- La finestra identificata da hWnd non possiede alcuna finestra pop-up.
- La finestra identificata da hWnd non è una finestra di livello superiore o è di proprietà di un'altra finestra.
Oggi l'utente histrio ha risposto correttamente in un altro thread che non basta monitorare le forme modali di Delphi; Windows può anche avere finestre di dialogo modali.
La sua in un'altra discussione ti mostra come verificare.
- Jeroen