Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi TBitBtn仅使用旧版Windows主题显示_Delphi_User Interface_Button_Manifest_Delphi 6 - Fatal编程技术网

Delphi TBitBtn仅使用旧版Windows主题显示

Delphi TBitBtn仅使用旧版Windows主题显示,delphi,user-interface,button,manifest,delphi-6,Delphi,User Interface,Button,Manifest,Delphi 6,我为我的Delphi 6应用程序创建了清单文件,这样它就可以根据Windows定义的主题显示控件(controls 6.0)。除了TBitBtn组件外,其他一切看起来都很好,该组件使用传统主题显示: 在Windows XP和Windows 7上,无论当前主题如何,即使没有为TBitBtn组件分配图像,行为都是相同的 现在,当我在表单上放置一个常规的t按钮时,它显示OK。然后,如果我在运行时以编程方式将图像设置到此按钮(使用SendMessage(Handle、BM\u SETIMAGE、ima

我为我的Delphi 6应用程序创建了清单文件,这样它就可以根据Windows定义的主题显示控件(controls 6.0)。除了
TBitBtn
组件外,其他一切看起来都很好,该组件使用传统主题显示:

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

现在,当我在表单上放置一个常规的
t按钮时,它显示OK。然后,如果我在运行时以编程方式将图像设置到此按钮(使用
SendMessage(Handle、BM\u SETIMAGE、image\u图标、LPARAM(图标))
,它会立即将其样式恢复为旧样式


有没有一种方法可以使
TBitBtn
使用正确的样式,或者在常规
TButton
上显示glyph,而不恢复到Delphi 6中的旧样式?

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

处理这个问题的标准方法是添加一些第三方软件来执行这个魔术。这就是问题所在

以下是Delphi 6应用程序的屏幕截图,其中包括主题管理器:


谢谢你的回答。让我困惑的是,当我设置图像时,为什么
TButton
会在运行时恢复到遗留模式。我猜VCL会出于任何原因接管绘画。同样,主题管理器解决了这个问题。也就是说,在我的测试中,我没有观察到您报告的行为。
TButton
TBitBtn
行为?Delphi 6?这个评论线程是关于
TButton
的。无论如何,我想我回答了你的问题,不是吗?是的,我知道theme manager,但在这种情况下,我必须在我的所有应用程序中包括theme manager DLL,对吗?我宁愿保留传统的外观。我不会指望WinXP的
BM_SETIMAGE
(无论是否设置
BS_图标
样式)。它不能像预期的那样工作!使用Win7应该不会有任何问题。你是对的-它删除了标题,但显示了图像(并恢复了样式)。WM_设置图标不工作。