delphi modal-dialog mdi

¿Cómo puedo saber si mi aplicación delphi tiene actualmente una ventana modal?



modal-dialog mdi (5)

Podrías probar con este código:

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

Probé con Delphi 4, funciona para mí.

[EDITAR]: Pero realmente deberías pensar si mostrar una forma y robar el foco es una buena idea. Depende de su aplicación, pero si un usuario está ingresando algo en un campo de edición o haciendo algo con el mouse, esto podría interrumpir su flujo de trabajo.

Tengo un temporizador ejecutándose en mi aplicación Delphi MDI y me gustaría utilizarlo para mostrar un mensaje si algo cambia en el fondo. Pero no quiero que aparezca ese mensaje cuando la aplicación tiene un diálogo modal en primer plano porque el usuario no pudo hacer nada al respecto.

Entonces, ¿qué me gustaría saber es cómo puedo verificar la existencia de un diálogo modal en mi aplicación?


Quizás la solución es mostrar una pista que no robe el foco. Una pista clicable en algún lugar visible, pero no demasiado invasiva. Por lo tanto, si el usuario quiere actuar, puede, o puede terminar lo que estaba haciendo, y luego tomar medidas. O tal vez ignorarlo por completo.


use la función AnyPopup ()

Acerca de GetLastActivePopup (). Puede devolver el valor es lo mismo que el parámetro hWnd cuando

  • La ventana identificada por hWnd fue la más reciente activa.
  • La ventana identificada por hWnd no posee ninguna ventana emergente.
  • La ventana identifica por hWnd no es una ventana de nivel superior, o es propiedad de otra ventana.

Desde Delphi 2005 tiene una propiedad ModalLevel en TApplication. Cuenta la cantidad de formularios modales abiertos en la aplicación.


Hoy el usuario histrio contestó correctamente en otro hilo que simplemente monitoreando formularios modales Delphi no es suficiente; Windows también puede tener diálogos modales.

Su respuesta en otro hilo te muestra cómo verificar eso.

--jeroen