1

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

4

2 回答 2

4

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

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

是 Andreas 文章的链接。

于 2010-06-05T07:52:03.420 回答
3

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

  • SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
  • 更新分层窗口

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

  • 开始延迟窗口位置
  • 延迟窗口位置
  • EndDeferWindowPos

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

PS:从 Uwe Raabe 处阅读 Andrea 的链接,他使用的是相同的技术,只是他将其打包以准备行动!

于 2010-06-07T08:36:18.493 回答