Как мне узнать, есть ли в моем приложении delphi в данный момент модальное окно?

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

  •  08-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

  end;
end;

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

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

Другие советы

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

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

использование Любой поп-ап() функция

О нас GetLastActivePopup Получить Last activepopup().Он может возвращать значение, такое же, как у параметра hWnd, когда

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

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

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

--джерун

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top