Como faço para descobrir se minha aplicação delphi atualmente tem uma janela modal?
-
08-07-2019 - |
Pergunta
Eu tenho um temporizador em execução no meu aplicativo Delphi MDI e eu gostaria de usá-lo para aparecer uma mensagem se algo muda em segundo plano. Mas eu não quero que a mensagem de pop-up quando o aplicativo tem um diálogo modal em primeiro plano porque o usuário não pode fazer nada sobre isso.
Então, o que eu gostaria de saber é como eu posso verificar a existência de um diálogo modal na minha candidatura?
Solução
Você poderia tentar com este código:
var
ActForm: TCustomForm;
begin
ActForm := Screen.ActiveForm;
if (ActForm = nil) or not (fsModal in ActForm.FormState) then begin
end;
end;
Eu testei com Delphi 4, funciona para mim.
[EDIT]: Mas você deve realmente pensar sobre se aparecendo um formulário e roubar o foco é uma boa idéia. Depende da sua aplicação, mas se um usuário está entrando em algo em um campo de edição, ou fazer algo com o mouse, em seguida, isso pode quebrar o seu fluxo de trabalho.
Outras dicas
Desde Delphi 2005 você tem um ModalLevel propriedade em TApplication. Ele conta o número de formas modais abertos na aplicação.
Talvez a solução é realmente aparecer uma dica que não roubar o foco. Uma dica que pode ser clicado em algum lugar visível, mas não muito invasivo. Assim, se o usuário deseja tomar medidas que podem, ou eles podem acabar com o que estavam fazendo, em seguida, tomar medidas. Ou talvez ignorá-lo completamente.
AnyPopup () function
GetLastActivePopup (). Ele pode retornar o valor é o mesmo que o parâmetro hWnd quando
- A janela identificado por hWnd foi mais ativo recentemente.
- A janela identificado por hWnd não ser proprietária de janelas pop-up.
- Os identifica janela por hWnd não é uma janela de nível superior, ou seja propriedade por outra janela.
Hoje utilizador histrio respondidas corretamente em outro segmento que apenas monitorando formas de Delphi modais não é suficiente; Windows também pode ter diálogos modais.
em outro segmento mostra como verificar para isso.
- jeroen