Delphi - détecter si mon application a une boîte de dialogue modale ouverte
-
26-09-2020 - |
Question
J'ai une application Delphi 2006 qui affiche une boîte de dialogue d'alerte modale lorsqu'une condition d'erreur est détectée.Comme la vérification de la condition d'erreur est effectuée dans un gestionnaire inactif, la boîte de dialogue peut apparaître au-dessus d'une autre boîte de dialogue modale si celle-ci s'affiche.Cela peut conduire à une situation déroutante pour l'utilisateur dans laquelle le formulaire principal de l'application n'obtient pas le focus après la fermeture de la boîte de dialogue d'alerte, car il s'agit d'une autre boîte de dialogue modale masquée.
Ce que je voudrais faire, c'est reporter les fenêtres contextuelles d'alerte pendant que l'application a des boîtes de dialogue modales ouvertes.
J'ai essayé GetLastActivePopup (MyMainWindow.Handle) mais il semble revenir tout le temps différent de zéro.
La solution
Voir TAPPLICATION.MODALLEVEL ou TapLlication.onmodalbegine et TUPLLICATION.Enmodalend événements.Voir aussi Cette question .
Autres conseils
Il suffit de tester
if not IsWindowEnabled(MyMainWindow.Handle) then
Cela prendrait également en charge les situations où un dialogue non-Delphi agit de manière modale, comme dans windows.MessageBox(Handle...
.ou un dialogue commun montre (c'est-à-direun TOpenDialog).
Utilisez AnyPopup () fonction
À propos de GetLasCactivePopup ().Il peut renvoyer la valeur est la même que le paramètre HWND lorsque
- La fenêtre identifiée par HWND a été la plus récemment active.
- La fenêtre identifiée par HWND ne possède aucune fenêtre contextuelle.
- La fenêtre identifie par HWND n'est pas une fenêtre de niveau supérieur ou appartient à une autre fenêtre.