如何使表单成为完全透明的32位alpha?

时间:2010-06-05 04:13:44

标签: delphi forms alphablending

我用来创建一个完全透明的表单,但是png和32位图像不会混合到表单中,并且图像没有正确显示其透明度。我得到了概念here,但我不能把按钮放在上面。除了图像背景之外,所有的都是看不见的。顺便说一句,我的编译器是delphi7和D2009

2 个答案:

答案 0 :(得分:4)

似乎Andreas Hausladen偶然发现了一个类似的问题,并且已经实现了一个解决方案:他在JVCL库中重写了TJvTransparentForm。

即使您不打算直接使用该组件,您也可以通过研究来源获得一些见解。

Here是Andreas文章的链接。

答案 1 :(得分:3)

如果您想使用PNG来控制透明度,您可能需要查看“分层窗口”:

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

这允许您在窗口中具有可变透明度,就像PNG允许的那样!问题是,分层窗口上的控件并不真正起作用,我想这是一个Windows问题。我的解决方案是将大窗口实际制成多个较小的窗口,所有控件都放在非分层窗口上。这会产生另一个问题,因为您现在有多个窗口,并且您希望它们像单个窗口一样移动。解决方案:实现自己的算法,在屏幕上移动窗口并使用:

  • BeginDeferWindowPos
  • DeferWindowPos
  • EndDeferWindowPos

...一次移动所有窗口,因此用户不知道她在看多个窗口!最后,如果你想获得幻想,你可能想要查看SetWindowRgn:这允许你创建一个非矩形形状的窗口。

P.S:阅读Andrea与Uwe Raabe的联系,他正在使用相同的技术,只是他打包准备行动了!