Comment savoir si mon application Delphi dispose actuellement d'une fenêtre modale?

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

  •  08-07-2019
  •  | 
  •  

Question

J'ai une minuterie en cours d'exécution dans mon application Delphi MDI et j'aimerais l'utiliser pour faire apparaître un message si quelque chose change en arrière-plan. Mais je ne veux pas que ce message apparaisse lorsque l'application a un dialogue modal au premier plan, car l'utilisateur ne peut rien y faire.

Ce que j'aimerais savoir, c'est comment puis-je vérifier l'existence d'un dialogue modal dans mon application?

Était-ce utile?

La solution

Vous pouvez essayer avec ce code:

var
  ActForm: TCustomForm;
begin
  ActForm := Screen.ActiveForm;
  if (ActForm = nil) or not (fsModal in ActForm.FormState) then begin

  end;
end;

J'ai testé avec Delphi 4, cela fonctionne pour moi.

[EDIT]: Mais vous devriez vraiment vous demander si le fait d’afficher un formulaire et de voler le focus est une bonne idée. Cela dépend de votre application, mais si un utilisateur est en train de saisir quelque chose dans un champ de saisie ou de faire quelque chose avec la souris, cela pourrait interrompre son flux de travail.

Autres conseils

Depuis Delphi 2005, vous disposez d'un ModalLevel . propriété sur TApplication. Il compte le nombre de formulaires modaux ouverts dans l'application.

Peut-être que la solution consiste à faire apparaître un indice qui ne vole pas le focus. Un indice cliquable quelque part visible, mais pas trop envahissant. Ainsi, si l'utilisateur souhaite prendre des mesures, il peut le faire ou peut terminer ce qu'il était en train de faire. Ou peut-être l'ignorer complètement.

utilisez la fonction AnyPopup () / p>

À propos de GetLastActivePopup (). Il peut retourner une valeur identique à celle du paramètre hWnd lorsque

  • La fenêtre identifiée par hWnd était la plus récente active.
  • La fenêtre identifiée par hWnd ne possède aucune fenêtre contextuelle.
  • La fenêtre identifiée par hWnd n'est pas une fenêtre de niveau supérieur ou appartient à une autre fenêtre.

Aujourd'hui, l'utilisateur histrio a répondu correctement dans un autre thread qui se contente de surveiller les formulaires Delphi modaux ne suffit pas; Windows peut également avoir des dialogues modaux.

Son répondre dans un autre fil vous indique comment vérifier cela.

- jeroen

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top