TBitBtn仅使用传统的Windows主题显示

3
我为我的Delphi 6应用程序创建了清单文件,以便根据Windows定义的主题(控件6.0)显示控件。除了TBitBtn 组件之外,其他都看起来很好,它使用传统的主题进行显示:

Legacy TBitBtn

无论当前主题是什么(即使没有将图像分配给TBitBtn组件),在Windows XP和Windows 7上的行为都相同。
现在,当我在窗体上放置一个常规的TButton组件时,它显示正常。如果我在运行时以编程方式为此按钮设置图像(使用SendMessage(Handle, BM_SETIMAGE, IMAGE_ICON, LPARAM(Icon))),它会立即恢复到传统的样式。
在Delphi 6中,是否有一种方法可以使TBitBtn使用适当的样式,或者在不恢复为传统样式的情况下在常规TButton上显示图标?

1
我不会指望在WinXP上使用BM_SETIMAGE(无论是否设置了BS_ICON样式)。它不能按预期工作!在Win7中应该没有问题。 - kobik
你是对的 - 它移除了标题但显示了图像(并还原了样式)。WM_SETICON没有起作用。 - adlabac
1个回答

5
在 Delphi 6 中,仅添加 comctl32 v6 清单是不够的。您还需要修改 VCL 以支持主题。在其 Delphi 6 版本中,TBitBtn 控件是一个由 VCL 实现的控件,它对 XP 主题一无所知。
处理此问题的标准方法是添加一些第三方软件来完成魔法。这就是 Mike Lischke 的 XP 主题管理器
这是一个包含主题管理器的 Delphi 6 应用程序的截图:

enter image description here


3
谢谢您的提问。我困惑的是,当我将图像设置到TButton上时,在运行时为什么TButton会恢复为旧版? - adlabac
1
我猜VCL出于某种原因接管了绘画。不过,主题管理器可以解决这个问题。话虽如此,在我的测试中,我没有观察到你所报告的行为。 - David Heffernan
TButton或TBitBtn的行为?Delphi 6? - adlabac
这个评论线程都是关于 TButton 的。无论如何,我认为我回答了你的问题,对吧? - David Heffernan
是的,我知道主题管理器,但在那种情况下,我将不得不在所有应用程序中包含主题管理器DLL,对吧?我宁愿保留传统外观。 - adlabac
显示剩余3条评论

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