Pregunta

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

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

¿Fue útil?

Solución

Puedes 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ía pensar si es una buena idea abrir un formulario y robar el foco. 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.

Otros consejos

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

Quizás la solución sea hacer aparecer una pista que no robe el foco. Una sugerencia en la que se puede hacer clic en algún lugar visible, pero no demasiado invasivo. Por lo tanto, si el usuario quiere tomar medidas, puede, o puede terminar lo que estaba haciendo, entonces tome medidas. O tal vez ignorarlo por completo.

use función AnyPopup ()

Acerca de GetLastActivePopup (). Es posible que el valor devuelto sea el mismo que el parámetro hWnd cuando

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

El usuario de hoy histrio respondió correctamente en otro hilo que simplemente monitorear los formularios modales de Delphi no es suficiente; Windows también puede tener cuadros de diálogo modales.

Su responde en otro hilo muestra cómo comprobarlo.

--jeroen

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top