Как сделать так, чтобы FindDialog не оставался наверху (Delphi)?

В Delphi 2009 я делаю простое:

FindDialog.Execute;

Окно FindDialog остается поверх главного окна моей программы, как и должно.

Однако, если я открою другое окно из какой-либо другой программы поверх окна моей собственной программы, окно FindDialog остается поверх другого окна.

Если я попробую это с помощью FindDialog из другой программы (например, Блокнота), этого не произойдет. Открытие окна другой программы через Блокнот и его FindDialog будет охватывать как окна Блокнота, так и FindDialog. Это кажется правильным и ожидаемым поведением.

Это что-то, что я делаю неправильно, или проблема в том, как Delphi реализовал FindDialog? Могу ли я что-нибудь сделать, чтобы он работал как в Блокноте?


Спасибо всем за комментарии. Тот факт, что вы не можете воспроизвести мою проблему, уже говорит о том, что это что-то еще вызвало это. Это поможет мне его отследить. Я изучу еще немного и опубликую здесь дополнительную информацию, когда что-нибудь узнаю.


Очень интересно. Мой PrintDialog не остается на вершине. Все еще не не знаю, почему мой FindDialog делает. Все еще исследую ...


Я изменил вызов на: FindDialog.Execute (Handle); Все еще наверху.


Я добавил еще один FindDialog (на этот раз FindDialog1) в свою основную форму и выполняю его при запуске моей программы. Он ведет себя так же, как и всегда. Это, по крайней мере, указывает на то, что это не имеет ничего общего с моим FindDialog или настройками, которые я сделал для этого. Так что это должно быть сеттинг в моей основной форме.


Не похоже, что я единственный, кто столкнулся с этим. См .: Resource Tuner: История версий , который выглядит как приложение Delphi, где в версии 1.99 говорится: «Исправление ошибки: окно предварительного просмотра диалогового окна (поиск) оставалось наверху при переключении на другое приложение». Я мог бы попытаться связаться с ними и посмотреть, могут ли они вспомнить, что было их исправлением. PrintDialog и FontDialog не остаются наверху и работают должным образом.

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


Кроме того, эта проблема возникает в старой версии моя программа, скомпилированная с помощью Delphi 4. Упс. Теперь я вижу, что этой проблемы не было в моей старой версии, использующей Delphi 4.

И это был пользователь, который сообщил об этой проблеме. Он использует Windows XP, а я разрабатываю для Vista, так что это происходит под разными ОС.


Подтверждение: Да, я создаю новую форму и добавляю к ней FindDialog. У FindDialog нет проблемы. Это означает, что что-то в моей программе заставляет FindDialog оставаться на вершине. Теперь мне просто нужно выяснить, что это такое. Есть еще идеи? Если кто-то дает мне ответ, который даже дает мне подсказку, чтобы помочь мне решить эту проблему, то они я получу принятый ответ.


Решение: правка Сертака к его ответу дала мне обходной путь:

  Application.NormalizeTopMosts;
  FindDialog.Execute();
  Application.RestoreTopMosts;

Это не позволяет FindDialog быть TopMost, когда приложение не TopMost.

... Но я все еще действительно не понимаю Не понимаю этого (справка Delphi по NormalizeTopMosts) очень сбивает с толку и не указывает, что он должен это делать.

Надеюсь, это «исправление» не вызовет других проблем.

6
задан lkessler 23 March 2011 в 04:32
поделиться