Как сделать так, чтобы диалог всегда был перед главным окном - PullRequest
3 голосов
/ 23 августа 2010

Я пока не нашел лучшего решения для этого. У меня есть немодальное диалоговое окно, которое может быть открыто в неограниченных случаях горячей клавишей в приложении. Даже сам диалог может открыть новый экземпляр. Я хочу, чтобы эти диалоги всегда были перед главным окном приложения. Я попробовал пару вещей.

  • Установите для FormStyle значение fsStayOntop. Это работает, но имеет то преимущество, что диалоговое окно будет находиться перед ВСЕМИ окнами, даже другими приложениями. Я только хочу, чтобы оно было перед моим главным окном.
  • Установите PopupMode в pmAuto. Это также работает за исключением случая, когда один диалог открывает другой диалог. Если первый диалог закрыт, второй автоматически закрывается. Это не приемлемо.
  • Используйте свойства по умолчанию для формы. Как только главное окно щелкают по открывшимся диалоговым окнам, оно находится за основным окном.

Любые другие предложения: -)

Ответы [ 4 ]

7 голосов
/ 23 августа 2010

С TCustomForm.PopupParent Свойство ;

Если свойство PopupMode установлено в pmExplicit и PopupParent - ноль, тогда Application.MainForm неявно используется как PopupParent

.

2 голосов
/ 23 августа 2010

AFAIK Delphi 2007 поддерживает функцию MainFormOnTaskbar.Если

   Application.MainFormOnTaskbar := True;

в исходном проекте, над главной формой отображается ЛЮБАЯ форма заявки (с родительским окном по умолчанию).


Если вы не уверены, какая форма является главной, перейдите кПроект / Параметры / Формы и установите правильную Основную форму.Другая вероятная причина заключается в том, что вы обновляете проект с предыдущей версии Delphi, чтобы исходный код проекта не содержал вышеуказанную строку кода - добавьте эту строку вручную.

0 голосов
/ 24 августа 2010

Я думаю, что ваше первое усилие, fsstayontop, является лучшим вариантом. Проблема с отображением перед другими приложениями может быть невозможна, поскольку вы действительно используете функцию Windows, а не нечто уникальное для Delphi.

Насколько я помню, можно вручную установить порядок Z, но это утомительно или невозможно в большинстве приложений.

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

0 голосов
/ 23 августа 2010

Вы можете попытаться просмотреть событие OnHide и сразу сделать флаг Visible равным TRUE. Это, вероятно, вызовет мерцание.

...