2011-03-24 81 views
0

在Delphi中可以將窗口保留在所有其他窗口之上嗎?例如,當您的應用程序中出現錯誤消息時,假設您希望將窗口保持在最前,並確保用戶在可以執行任何其他操作之前必須點擊某個內容。我的意思是任何事情,比如在後臺點擊另一個程序。在Java中怎麼樣?在Delphi或Java中保持窗口頂部

+5

[不,你**不能**這樣做!](http://blogs.msdn.com/b/oldnewthing/archive/2011/03/10/10138969.aspx) – 2011-03-24 12:55:46

+3

即使你可以,你的用戶會殺了你。 – 2011-03-24 12:59:31

+0

@GameCat - 查看我對肯的回覆。 – RBA 2011-03-24 13:32:28

回答

5

微軟的Raymond Chen有一篇很好的文章,關於爲什麼不是here

+1

很好的答案,但有時客戶有很棒的想法,而且你需要滿足他們......甚至是錯的! – RBA 2011-03-24 13:31:59

+1

@Radu Barbu:如果Windows不允許,不管客戶是否願意,都不行。 – 2011-03-24 13:46:42

0

你可以在過去做到這一點。它被稱爲系統模式對話框,您使用現在已經過時的功能SetSysModalWindow()函數。

他們完全令人厭惡,所以當基於Windows NT的Windows版本接管時,感覺和順序已經恢復。

0

在德爾福你可以做FormStyle:=fsStayOnTop;。這會讓你置身於所有正常的窗戶前。

但是,如果還有其他窗口也設置了該樣式(例如任務欄),那麼這些窗口可能在您的面前。尤其在那些窗口中,重點關注的窗口具有最高優先級。

您可以嘗試確保您的窗口始終具有焦點,但這不是一個好主意。你會招致雷蒙德的幽靈。

您也可以使用分層窗口。我認爲這些都在正常的頂級窗口之前。但是這有嚴重的副作用,很可能不是你的正確選擇。

+1

OP說「像在後臺點擊另一個程序」,所以fsStayOnTop沒有完成。實際上,它無論如何都是毫無意義的,因爲對話框大概是模態的(即應用模式),無論如何都是在應用窗口之上。 – 2011-03-24 13:14:57

+0

如果其他程序沒有設置AlwaysOnTop,它將保持OP的程序在其他程序的前面。 – CodesInChaos 2011-03-24 13:21:20

+0

@CodeInChaos,true,但其他窗口仍有可能獲得焦點。你可以通過捕捉鼠標來做骯髒的詭計,但準備火把和乾草叉。 – 2011-03-24 13:24:23