如何更改TButton的颜色?

6
在"Borland" C++ Builder 6中,如何更改按钮(TButton)的颜色?我尝试了以下方法:
button->Font->Color = clRed;

但是它不起作用。
4个回答

11

TButton是标准Win32 BUTTON控件的简单封装,其颜色来自操作系统而非VCL。您不能为标准的TButton设置Color属性。该属性仅因继承自基类而存在。

话虽如此,Win32 BUTTON支持BS_OWNERDRAW样式。您可以使用SetWindowLong()启用它,然后子类化按钮以处理WM_DRAWITEM消息,以便您可以按照所需进行绘制。

这是一个从TButton派生并实现BS_OWNERDRAW以公开工作颜色属性的示例组件:TColorButton


2
链接网页http://delphi.about.com/od/vclwriteenhance/l/aa061104a.htm上没有可下载的`TColorButton`源代码。 - user1580348

4

使用TPanel控件,设置颜色和边缘效果以匹配按钮的外观。使用OnClick事件,就可以得到一个颜色按钮啦~ ;O-)


3
乍一看这是个好主意,但无论你如何调整斜面设置,该面板看起来都与表单上的常规TButton完全不同。 - nurettin
1
而且更重要的是,需要额外的工作才能使用键盘(例如制表符键、箭头键、空格键、回车键、Alt+字母等)和辅助功能来让它可以被访问。 - Andreas Rejbrand

3
另一种选项是使用TBitBtn,它不是围绕WIN32控件的包装器,而是完全由VCL绘制。
因为它是一个图形控件,所以所有内容都会如你所期望那样绘制。
TBitBtn甚至可以接收键盘焦点,因此应该能够正常工作。

实际上,TBitBtn确实可以接收键盘焦点,因此这实际上是解决问题的方法。 - dummzeuch
@dummzeuch 可能是与 TSpeedButton 混淆了。 - vals
我不明白:TBitBtn有哪个属性可以改变它的颜色?我没有看到Color属性。 - Gabriel
@ServerOverflow,BitBtn需要一个位图。创建一个带有所需颜色的位图并将其插入到BitBtn中。如果您没有选择任何位图,则BitBtn会硬编码为系统按钮颜色(clClrBtnFace)。 - Johan

2

TBitBtn可以改变字体标题的颜色。之前的回答说它不能接收键盘焦点,但我不确定那个人的意思——我刚刚创建了一个包含其他几个对象(包括一个BitBtn)的表单,并设置了Tab键顺序,确实会获得焦点。我可以按下键盘上的空格键来推按钮,我还可以在所需字母前面加上&符号来添加ALT热键。对于按钮的所有目的,它似乎行为就像Win32控件一样,但是有颜色——耶!是的,我正在使用Borland C++ Builder 6。

  • atomkey -

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接