如何让我的桌面工具栏透明?

11

我正在为 Windows XP、Vista 和 7 (Win32 和 Win64) 使用 Delphi XE2 开发一个桌面工具栏(Deskband)...

我在代码中实现了所有必要的接口(ITrayDeskBand、IDeskBandInfo、IDeskBand2、IDeskBand),它们都按照预期工作(与其他人遇到的兼容性警告不同,Windows Vista/7 没有抱怨)。

问题在于我的 Deskband 窗体显示为非透明窗口。此外,只有特定的控件会显示(在这种情况下是 TBitBtn 和包含 PNG 的 TImage)。我也需要 TEdit 和 TComboBox 对象正常显示,但它们根本不会出现。

我尝试在我的窗体上启用 GlassFrame 和 SheetOfGlass 属性,但这并没有任何帮助。

此外,窗体本身超出了任务栏的顶部边界,这意味着如果光标与我 Deskband 正上方的任务栏顶部对齐,则无法调整任务栏的大小。

我相信 Delphi 的 VCL TForm 类型正在幕后执行一些操作,这导致 TForm 类型不兼容作为 Deskband 容器...但这只是一种猜测。

以下是说明各种问题的屏幕截图:

enter image description here

如上图所示,Deskband 窗体很浅(而不是透明),它重叠在任务栏的顶部(防止调整大小并触发“自动隐藏”功能,当任务栏被“隐藏”时)。

有什么想法吗?

更新 1 好吧,我已经尝试了一些方法,并注意到当创建一个 TToolBar 控件用于 Deskband 时,会出现完全不同的行为:

enter image description here

请注意有三个TToolButton控件(由于玻璃主题,它们的文本几乎不可见)?还应该有一个TEditTComboBox在两个分隔符之间,但它们拒绝显示。

同时注意到图标的重复现象(实际任务栏图标的重复)?

我不确定这是否是正确的方向,但它可能会帮助你(或其他人)推断出解决方案!


你尝试过调整窗体的AlphaBlend属性了吗? - Pateman
是的...完全没有用!看起来唯一有区别的属性是GlassFrame/SheetOfGlass...但那只能让我到达图片中显示的点! - LaKraven
你尝试过将GlassFrameAlphaBlend结合起来使用吗? :) - Pateman
完全没有任何区别。 - LaKraven
1个回答

14

好的...我终于弄清楚了,这是我遇到过的最荒谬的事情。

我在此发布我的发现,以便他人受益(为了节省你刚刚经历的麻烦)。

要想让工具栏表单上的所有控件正确显示和正常运行,只需将表单(在IDE设计器中)的Visible属性设置为True即可。

虽然很荒谬,但它可行且容易重复。


是的...至少在XE2中,VCL TForm的“Visible”属性默认为“False”。 - LaKraven
LOOOL!! 这真的是一个值得放在“WTF”墙上的东西,好发现! - user497849
1
@LaKraven,在Delphi 7中,TForm的Visible属性默认为False。 - VibeeshanRC
1
自 Delphi 1 开始,TForm.Visible 默认为 False,这在大多数情况下都是有意义的 - 直到你准备好 ShowShowModal 前,你不希望窗体可见。然而,在这种情况下似乎并没有正常工作。你是否像通常一样在 DFM 中使用 Application.CreateForm 来设置主窗体? - Ken White

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接