我在Delphi XE2中使用新的VCL样式系统,它的工作正常,但在一个Form上我想要异常。此表单包含多个TBitBtn控件,每个TBitBtn控件都有自己的字体颜色(clRed,clBlue,clLime等)与其他颜色不同。 由于Style实现,所有TBitBtn控件的标题都以黑色而不是设置颜色显示。 是否有任何可以在TBitBtn控件上注册的TStyleHook,它在该窗体上禁用了TBitBtn控件上的样式?
答案 0 :(得分:2)
TBitBtn
组件不使用vcl样式钩子,此控件使用TButtonGlyph
类(在Vcl.Buttons单元的实现部分中定义和实现)来绘制按钮使用Windows主题或当前的vcl样式,此类(TButtonGlyph)在本机之外无法访问,因此您在这里运气不佳。
我想到的唯一选择是创建一个内插器类并拦截CN_DRAWITEM
控件的TBitBtn
消息,然后执行自己的代码来绘制按钮。
TBitBtn = class(Vcl.Buttons.TBitBtn)
private
procedure MyDrawItem(const DrawItemStruct: TDrawItemStruct);
public
procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
end;
procedure TBitBtn.CNDrawItem(var Message: TWMDrawItem);
begin
MyDrawItem(Message.DrawItemStruct^);
end;
procedure TBitBtn.MyDrawItem(const DrawItemStruct: TDrawItemStruct);
begin
//the new code goes here.
end;