Delphi – определение того, открыто ли в моем приложении модальное диалоговое окно
-
26-09-2020 - |
Вопрос
У меня есть приложение Delphi 2006, которое отображает модальное диалоговое окно предупреждения при обнаружении ошибки.Поскольку проверка на наличие ошибки выполняется в обработчике простоя, диалоговое окно может появиться поверх другого модального диалогового окна, если оно отображается.Это может привести к запутанной ситуации для пользователя, когда основная форма приложения не получает фокус после закрытия диалогового окна предупреждения, поскольку это еще одно скрытое модальное диалоговое окно.
Я хотел бы отложить всплывающие окна с оповещениями, пока в приложении открыты модальные диалоговые окна.
Я попробовал GetLastActivePopup (MyMainWindow.Handle), но, похоже, он все время возвращает ненулевое значение.
Решение
См. см. см. TAPPLICALIC.Modallevel или Tapplication.onmodalbegin и Tapplication.onmodalend события.Также см. Этот вопрос .
Другие советы
Просто протестируйте
if not IsWindowEnabled(MyMainWindow.Handle) then
Это также позаботится о ситуациях, когда диалог, отличный от Delphi, действует модально, как в windows.MessageBox(Handle...
.или общий диалог показывает (т.TOpenDialog).
Использование Функция Anypopup () .
О getlastictivePopup ().Это может возвращать значение точно так же, как параметр HWND, когда
- .
- Окно, идентифицированное HWND, было совсем недавно активным.
- Окно, идентифицированное HWND, не владеет всплывающими окнами.
- Окно идентифицирует HWND, не является окном верхнего уровня, или он принадлежит другому окну.