2012-04-04 60 views
1

我遇到了VCL樣式的一個非常奇怪的問題。有時,無論是以預定義的樣式啓動程序,還是稍後設置一個程序,都會消失一個或一些程序窗口。德爾福XE2 VCL樣式,奇怪的小故障,窗口不可見

這種情況非常隨機,可能每10-20次發生一次,而不是在任何特定的窗口中。我有兩種形式在運行時打開,有時是一種,有時是另一種。

發生這種情況時,我檢查一些屬性,而窗口不可見,Visible屬性爲true,窗口邊界是正確的;如果我試圖通過Aero DWM實時縮略圖顯示窗口,它也是空的;如果我捕獲窗口DC,但是我得到一個帶有窗口的位圖,就好像它正常顯示(並且樣式已經應用)。

它不顯示任何錯誤,沒有警告,沒有例外..沒有什麼似乎錯了,只是窗口不存在。如果我將鼠標懸停在任務欄按鈕上以查看預覽,則會顯示該框,但它是空的。

任何想法要檢查什麼?

編輯:調用RecreateWnd將問題解決爲臨時解決方法,但是,它可能會再次失敗。

+0

胡亂猜測,它需要RecreatWnd。如果您點擊任務欄中顯示的預覽,會發生什麼情況? – 2012-04-04 18:22:43

+0

什麼都沒有。該程序變爲活動狀態,但不顯示任何內容。如果我切換到另一種樣式(通過托盤圖標菜單),它會再次顯示。看到這裏,通過任務欄預覽顯示每個表單不同的兩種情況:http://i.imgur.com/WT7KK.png http://i.imgur.com/gjClr.png另外,如果我做了一個bitblt在DC上,它捕捉正確應用樣式的窗口。 – hikari 2012-04-04 22:04:10

+0

調用RecreateWnd修復了這個問題,我將在啓動時調用此方法,並將樣式更改爲臨時解決方法。 – hikari 2012-04-05 00:33:29

回答

2

找到問題的原因:「Alphablend」。如果啓用該功能,即使在255,也會出現問題。

重現步驟:

  • 打開新的VCL窗體項目
  • 項目的選擇,外觀,設置一個風格的主題。我用鈷XE的測試
  • 設置ALPHABLEND爲true
  • 運行

可能需要10-20運行,直到它的毛刺。

我注意到它發生時,窗口實際上是在那裏..你可以將鼠標懸停在上面,注意到那裏有東西。如果你猜測他們的位置,你甚至可以點擊控件。如果您設法在不可見的情況下拖動窗口,它會顯示出來。如果你最小化/恢復它也會顯示出來。

如果你做ALT + PrtScr而窗口處於活動狀態,並且在油漆等貼,你會得到它背後的內容與窗口的界限,彷彿alphablendvalue被設置爲0