Come faccio a sapere se la mia applicazione Delphi ha attualmente una finestra modale?

StackOverflow https://stackoverflow.com/questions/284581

  •  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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top