Как мне узнать, есть ли в моем приложении delphi модальное окно? - PullRequest
5 голосов
/ 12 ноября 2008

В моем приложении Delphi MDI запущен таймер, и я хотел бы использовать его для отображения сообщения, если что-то меняется в фоновом режиме. Но я не хочу, чтобы это сообщение появлялось, когда приложение имеет модальный диалог на переднем плане, потому что пользователь ничего не мог с этим поделать.

Так что я хотел бы знать, как я могу проверить наличие модального диалога в моем приложении?

Ответы [ 5 ]

9 голосов
/ 12 ноября 2008

Вы можете попробовать с этим кодом:

var
  ActForm: TCustomForm;
begin
  ActForm := Screen.ActiveForm;
  if (ActForm = nil) or not (fsModal in ActForm.FormState) then begin

  end;
end;

Я тестировал с Delphi 4, у меня работает.

[РЕДАКТИРОВАТЬ]: Но вы должны подумать о том, является ли хорошей идеей появление формы и кража фокуса. Это зависит от вашего приложения, но если пользователь в данный момент вводит что-то в поле редактирования или делает что-то с помощью мыши, это может нарушить их рабочий процесс.

6 голосов
/ 13 ноября 2008

Начиная с Delphi 2005 у вас есть свойство ModalLevel для TApplication. Подсчитывает количество модальных форм, открытых в приложении.

2 голосов
/ 22 июля 2010

использование AnyPopup () функция

О GetLastActivePopup (). Может возвращать значение, совпадающее с параметром hWnd, когда

  • Окно, идентифицированное hWnd, было самым последним активным.
  • Окно, идентифицированное hWnd, не имеет всплывающих окон.
  • Окно, идентифицируемое hWnd, не является окном верхнего уровня или принадлежит другому окну.
2 голосов
/ 12 ноября 2008

Возможно, решение состоит в том, чтобы на самом деле вывести подсказку, которая не крадет фокус. Кликабельный намек где-то видимый, но не слишком агрессивный. Таким образом, если пользователь хочет предпринять действия, которые он может, или он может завершить то, что он делал, тогда предпримите действия. Или, возможно, игнорировать это вообще.

1 голос
/ 22 июля 2010

Сегодня пользователь histrio правильно ответил в другой ветке , что просто мониторинга модальных форм Delphi недостаточно; Windows также может иметь модальные диалоги.

Его ответ в другой теме показывает, как это проверить.

- Йерун

...