德爾福2009年,我做了一個簡單:如何讓FindDialog保持最佳狀態(Delphi)?
FindDialog.Execute;
的FindDialog的窗口上我的程序的主窗口頂部停留,因爲它應該。
但是,如果我通過自己的程序窗口從其他程序打開另一個窗口,則FindDialog窗口將保留在另一個窗口的頂部。
如果我用另一個程序(例如記事本)中的FindDialog試試這個,這不會發生。在記事本和FindDialog上打開另一個程序的窗口將覆蓋記事本和FindDialog窗口。這似乎是正確和預期的行爲。
這是我做錯了什麼,或者這是一個問題,德爾福實施FindDialog的方式?有什麼我可以做,使其工作記事本的方式?
謝謝大家的意見。你不能再現我的問題的事實已經是一個線索,這是其他事情造成的。這將幫助我追蹤它。我會研究多一點,並在發現一些事情時在此發佈更多信息。
非常有趣。我的PrintDialog不能保持在最前面。仍然不知道爲什麼我的FindDialog。仍在研究...
我將調用改爲:FindDialog.Execute(Handle);仍然在最上面。
我添加了另一個FindDialog(這次FindDialog1)到我的主窗體中,並在我的程序啓動時執行它。它具有相同的頂級行爲。這至少表明這與我的FindDialog或我所做的自定義無關。所以它一定是我的主要形式。
它看起來不像我是唯一遇到過這種情況的人。請參閱:Resource Tuner: Version History它似乎是一個Delphi應用程序,其版本1.99中指出:「修正:當切換到另一個應用程序時,(搜索)對話框預覽窗口保持最前端。」我可能會嘗試與他們聯繫,看看他們是否會記住他們的修補程序。
我增加一些新的對話,以我的形式,把這些電話在一個地方:
FindDialog1.Execute();
PrintDialog1.Execute();
ReplaceDialog1.Execute();
FontDialog1.Execute();
的FindDialog的和ReplaceDialog留在上面的其他窗口的前面。 PrintDialog和FontDialog不會保持最佳狀態並按照他們應該的方式工作。
那麼這兩組對話框之間有什麼不同,使前兩個對話框做錯了?
而且,這個問題發生在舊版本我的程序,將其與德爾福4
哎呦編譯。現在我發現這個問題在使用Delphi 4的舊版本中沒有發生。
而且是一位報告此問題的用戶。他使用Windows XP,而且我正在開發Vista,所以它發生在不同的操作系統下。
確認:是的,我創建一個新窗體並在其上添加一個FindDialog。 FindDialog沒有問題。這表明我的程序中的某些內容導致FindDialog保持最佳狀態。現在,我只需要知道那是什麼。還有什麼想法?如果有人給我一個答案,甚至給我一個線索來幫助我解決這個問題,那麼他們會得到接受的答案。
解決方案:Sertac的編輯給他的回答給我的解決方法:
Application.NormalizeTopMosts;
FindDialog.Execute();
Application.RestoreTopMosts;
這樣做可以防止FindDialog的被最頂層的應用程序時,不在最上方。
...但我仍然真的不明白這一點(在NormalizeTopMosts德爾福的幫助)是非常混亂,並不表示它應該這樣做。
希望這個「修復」不會導致其他問題。
無法重現此(D2009完全更新)。同時使用'FindDialog1.Execute;'和'FindDialog1.Execute();'這應該導致沒有傳入的句柄。當我打開查找對話框,然後打開一些其他應用程序(記事本在我的情況),並將其移過我的帶有對話框的Delphi應用程序,其主窗口和查找對話框都被記事本窗口覆蓋。 – 2011-03-21 07:44:20
我可能在這裏誤解了一些東西,但我無法在Delphi XE中重現。 – 2011-03-21 07:46:38
FWIW我無法在D2010中重現此行爲。你是否將HWND傳遞給Execute方法?如果不嘗試傳遞主窗體的句柄,看看是否有幫助。 – 2011-03-21 07:53:40