2013-04-11 139 views
0

我有一個很大的Delphi 6應用程序,我已經移植到Delphi XE3。主表單一次啓動另一種非模態形式。有時(比如說50%)在新創建的表單移動到主表單後面一兩秒鐘後。即使認爲它現在在後面,新創建的窗體仍然有焦點,所以沒有激活/停用事件。有幾個Timer控件,我禁用了它們。它仍然發生。窗體移動到後面並保持活動狀態

我可以接受我的代碼是這樣做的 - 但我怎麼才能找出發生了什麼?當新形式移動到後面時,是否有攔截方法?

只是要清楚:我希望兩個表單分開使用。他們中的任何一個都可以出現在另一個之後目前發生的事情是,Z-順序似乎在變化。

+0

請您提供一個完整的程序來演示問題。 – 2013-04-11 12:13:28

+0

好的 - 我試圖給出幾個答案滴答。 – Rob 2013-04-11 12:36:50

+0

這是一個經典的delphi問題,問題的名稱是爲什麼PopupMode和PopupParent被添加到Delphi 2007中的原因。如果不是最新的unicode版本,我認真的建議移動到2007年。 – 2013-04-13 02:00:19

回答

0

我已經找到了答案。我發現我已經添加了一個CreateParams覆蓋這樣做:

// make a taskbar window 
inherited CreateParams(params); 
params.ExStyle := params.ExStyle or WS_EX_APPWINDOW; 
params.WndParent := GetDesktopwindow; // this line caused the problem 

評論WndParent解決了它。效果是奇怪的,但。就好像有一個計時器在任何按鍵或鼠標事件之後約一秒鐘就會關閉,這會迫使窗口落在別人身後。感謝David Heffernan對於步進CreateParam的評論讓我注意到了它。

+2

雷蒙德陳寫了關於使桌面窗口成爲你的主人的危險。您也不需要添加應用程序窗口樣式。只需將WndParent設置爲0.任務欄上顯示無人擁有的頂級窗口。 – 2013-04-11 13:35:08

+0

感謝您的幫助David – Rob 2013-04-11 14:08:27

相關問題