Como faço para descobrir se minha aplicação delphi atualmente tem uma janela modal?

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

  •  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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top