2013-10-02 31 views
1

我希望能够将某种样式应用于我正在处理的应用程序中的少数BitBtn。我已将VCL样式应用于整个应用程序的皮肤。使用VCL样式时覆写某些TBitButton的样式

从我在网上阅读中理解的,我可以定义我自己的TBitBtn的子类,然后我可以为给定的类定义一个样式钩子。

我曾经与TLabel和TEdit一起工作,但我不太清楚如何管理TButton或TBitBtn。实质上,我想将不同的背景图像应用于自定义TBitBtn,而不是主题中包含的背景图像。

+0

你能举一个你想要的例子吗?可以使用您已经拥有的用于TEdit的代码,或者使用一些伪代码来解释您想要对TButton执行什么操作。 – Johan

回答

4

要修改使用VCL的样式TBitBtn的出现,取决于你的德尔福版本

XE4,XE5

您必须创建从TBitBtnStyleHook类派生的新的风格挂钩,然后重写DrawButton方法。检查这个问题Disabling TButton issue on a VCL styled form在这里我发布一个示例代码来覆盖TButtonStyleHook.Paint方法来修复一个bug,但是您可以根据自己的需要调整相同的代码。

XE2,XE3

TBitBtn不会对这些版本的使用风格挂钩,所以你唯一的选择是处理CN_DRAWITEM消息为TBitBtn控件,然后添加自己的代码来绘制按钮就像解释这个答案Delphi XE2 VCL styles, How to disable VCL styles on TBitBtn?

+0

它试过TStyleManager.Engine.RegisterStyleHook(TBitBtn,TButtonStyleHookFix);但它似乎并没有把我的形象称为TBitBtn。 TStyleManager.Engine.RegisterStyleHook(TButton,TButtonStyleHookFix);适用于纽扣。 TBitBtns是否也使用TButtonStyleHook或其他? – Alexandre

+0

在http://stackoverflow.com/questions/12195687/delphi-xe2-vcl-styles-how-to-disable-vcl-styles-on-tbitbtn你声称TBitBtn没有钩子 – Alexandre

+0

@Alexandre,对不起但我错过了你的Delphi版本,在Delphi的最新版本中'TBitBtn'使用了Style Hook(TBitBtnStyleHook),答案更新了。 – RRUZ