2010-06-05 33 views
1

我用來創建一個完整的透明窗體,但是PNG和32位圖像不會混合到窗體,圖像不能正確顯示其透明度。我得到的概念here但我不能把它放在按鈕上。除了圖像背景之外,所有的基礎都是不可見的。順便說一句,我的編譯器是delphi7和D2009如何將窗體變成完全透明的32位阿爾法?

+0

如果它是完全透明的,那麼你可以將它隱藏*。 – 2010-06-05 21:34:24

回答

4

似乎Andreas Hausladen偶然發現了一個類似的問題,並已經實現了一個解決方案:他重寫了JVCL庫中的TJvTransparentForm。

即使您不打算直接使用該組件,您也可以通過研究來源獲得一些洞察。

Here是鏈接到Andreas的文章。

+0

-1的鏈接沒有任何解釋。 – 2010-06-05 21:34:01

+0

請尊重JVCL的許可。即使從它複製源代碼,許可證也會保持不變。 – ChristianWimmer 2010-06-06 11:24:55

3

如果你想用一個PNG來控制透明度,你可能想看看 「分層窗口」:

  • SetWindowLong函數(句柄,GWL_EXSTYLE,GetWindowLong(手柄,GWL_EXSTYLE)或WS_EX_LAYERED);
  • UpdateLayeredWindow

這可以讓你有可變透明度翻過窗​​,就像PNG允許!問題是,分層窗口上的控件並不真正起作用,我猜這是Windows的問題。我的解決方案是將大窗口實際制動成多個較小的窗口,所有控件都放在非分層窗口中。這又產生了另一個問題,因爲你現在有多個窗口,你希望它們像一個窗口一樣移動。解決方案:實現自己的算法用於移動窗口翻過屏幕,並使用:

  • BeginDeferWindowPos
  • DeferWindowPos
  • EndDeferWindowPos

......在一次移動所有窗口,所以用戶不知道她在看多個窗口!最後,如果你想獲得幻想,你可能想看看SetWindowRgn:這允許你創建一個非矩形形狀的窗口。

P.S:閱讀安德里亞從Uwe Raabe的鏈接,他使用了相同的技術,只有他將它打包準備行動!