1

我在 Delphi XE2 中使用新的 VCL 样式系统,它工作正常,但在一个表单上我想要例外。此表单包含多个 TBitBtn 控件,每个 TBitBtn 控件都有自己的字体颜色(clRed、clBlue、clLime 等),与其他控件不同。由于 Style 实现,所有 TBitBtn 控件的 Caption 都以黑色而不是设置颜色显示。是否有任何可以在 TBitBtn 控件上注册的 TStyleHook,它在该表单上禁用了 TBitBtn 控件上的样式?

4

1 回答 1

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;
于 2012-08-30T17:57:55.057 回答