【问题标题】:TBitBtn displays only using legacy Windows themeTBitBtn 仅使用旧版 Windows 主题显示
【发布时间】:2014-12-03 12:58:35
【问题描述】:

我为我的 Delphi 6 应用程序创建了清单文件,以便它可以根据 Windows 定义的主题显示控件(控件 6.0)。一切看起来都很好,除了TBitBtn 组件,它使用旧主题显示:

无论当前主题如何,Windows XP 和 Windows 7 上的行为都是相同的,即使没有将图像分配给 TBitBtn 组件。

现在,当我将常规 TButton 组件放在表单上时,它会显示 OK。如果我在运行时以编程方式为该按钮设置图像(使用SendMessage(Handle, BM_SETIMAGE, IMAGE_ICON, LPARAM(Icon))),它会立即将其样式恢复为旧样式。

有没有办法让TBitBtn 使用正确的样式,或者在常规TButton 上显示字形而不恢复到Delphi 6 中的旧样式?

【问题讨论】:

  • 我不会指望BM_SETIMAGE 使用 WinXP(设置或不设置 BS_ICON 样式)。它没有按预期工作!用win7应该没问题。
  • 你是对的 - 它删除了标题但它显示了图像(并恢复了样式)。 WM_SETICON 不起作用。

标签: delphi user-interface button manifest delphi-6


【解决方案1】:

在 Delphi 6 中,仅添加 comctl32 v6 清单是不够的。您还需要修改 VCL 以识别主题。 TBitBtn 控件是一个 VCL 实现的控件,在其 Delphi 6 版本中,它对 XP 主题一无所知。

处理此问题的标准方法是添加一些执行魔术的第三方软件。那是XP theme manager from Mike Lischke

这是一个包含主题管理器的 Delphi 6 应用程序的屏幕截图:

【讨论】:

  • 感谢您的回答。令我困惑的是,为什么当我将图像设置为 TButton 时,它会在运行时恢复为旧版。
  • 我猜 VCL 出于某种原因接管了绘画。同样,主题管理器解决了这个问题。也就是说,在我的测试中,我没有观察到您报告的行为。
  • TButtonTBitBtn 行为?德尔福 6?
  • 这个评论线程都是关于TButton的。无论如何,我想我回答了你的问题,不是吗?
  • 是的,我知道主题管理器,但在这种情况下,我必须在我的所有应用程序中包含主题管理器 DLL,对吗?我宁愿保持传统的外观。
猜你喜欢
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 2015-02-25
  • 2021-03-27
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多