Delphi - detectar se o meu app tem uma caixa de diálogo modal aberto
-
26-09-2020 - |
Pergunta
Eu tenho um Delphi 2006 app que aparece um modal de diálogo de alerta quando uma condição de erro é detectado.Como o cheque para a condição de erro é feito em um manipulador de espera, a caixa de diálogo pode aparecer por cima de outra caixa de diálogo modal se que passa a ser exibido.Isso pode levar a uma situação confusa para o usuário, onde a aplicação do formulário principal não obter foco após o alerta de diálogo é fechada, porque estes é outro obscurecida caixa de diálogo modal.
O que eu gostaria de fazer é adiar o alerta de pop-ups enquanto o aplicativo tem qualquer Modal de caixas de diálogo abrir.
Eu tentei GetLastActivePopup (MyMainWindow.Identificador), mas parece retorno diferente de zero o tempo todo.
Solução
ver Tapplication.ModalLevel ou o Tapplication.onmodalbegin e Tapplication.OnModalend Eventos.Veja também Esta questão .
Outras dicas
Apenas teste
if not IsWindowEnabled(MyMainWindow.Handle) then
Este seria também cuidar de situtations quando um não-Delphi diálogo está atuando modal, como em windows.MessageBox(Handle...
.ou um de caixa de diálogo comuns está mostrando (i.e.um TOpenDialog).
Use anypopup () função .
sobre getlastactivepopup ().Pode retornar o valor é o mesmo que o parâmetro HWND quando
- A janela identificada pelo HWND foi mais recentemente ativa.
- A janela identificada pelo HWND não possui nenhuma janela pop-up.
- A janela identifica pelo HWND não é uma janela de nível superior, ou é de propriedade de outra janela.