如何改变控件Button的颜色?(100分)

  • 主题发起人 主题发起人 小弟(陈生)
  • 开始时间 开始时间

小弟(陈生)

Unregistered / Unconfirmed
GUEST, unregistred user!
要求做到的效果是:当鼠标移到Button控件上颜色就改变;移开鼠标颜色就变回原来的颜色。
 
你是改变button的背景颜色还是字体颜色?清说清楚!
 
button.color := clBlue
button.font.color := clwhite;
..................
 
可以用FlatButton 第三方控件
 
在OnEnter里:
button1.color:=clXXXX; //你想要的颜色
在OnExit里:
button1.color:=clUUUU;//你原来的颜色
 
如果不想用第三方控件也不想用TSpeedButton的话(为什么不用呢?),
你就需要自己定一个控件了,至于如何写,你可以分析一下Delphi的Buttons
单元中的TBitBtn控件的源码,你可以从TBitbtn上继承,主要是要重载DrawItem方法,
不过很遗憾,DrawItem方法是静态方法,不能重载了,所以只好重载CN_DRAWITEM消息处
理函数,这个函数的执行过程可以参照DrawItem方法,只不过加入绘制颜色的语句
就可以了,不过别忘了增加两个颜色属性.

另外如果要做到鼠标感知,还需要重载CM_MOUSEENTER和CM_MOUSELEAVE消息处理函数.
 
楼上有两位,如果用过Delphi的话请看看TButton控件有没有Color属性.
 
是改变字体的颜色,有办法吗?
 
我倒是有个主意,你干脆用Panel组件算了,在Panel组件的OnClick时间里面写处理的
代码,在OnEnter和OnExit里面写改变颜色的代码!
 
SetCaptureControl
呵呵
 
>>是改变字体的颜色,有办法吗?
這個好辦,font.color:=..
改變Button的顏色就不容易了,可以用別的控件或者有Panel代替,我用的是
Panel不過也不好,Enable=False的時候,不能變成灰色

 
如果一定要用TButton的话,改变字体的颜色也不行,如果仅仅是改变字体的颜色的话,用TBitbtn不就可以了?
 
两个消息
Procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
Procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
再这里面修改颜色
 
如果可以的话,请把原代码写出来,好让我参考参考,因为我是个初学者有许多不明的地方。
 
问题是TButton和TbitBtn都没有publish Color这个属性
如果你要设置字体颜色用TbitBtn还可以

可以用其它第三方控件
如CoolCOntrols
里面的TCoolBtn有Color属性
还有onMouseLeave 和 onMouseEnter事件
设置就方便啦
在51delphi有下
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;

type
TMyBitBtn = class(TBitBtn)
private
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
published

end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
BT:TMyBitBtn;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TMyBitBtn }

procedure TMyBitBtn.CMMouseEnter(var Message: TMessage);
begin
inherited;
Font.Color:=clRed;
Font.Size:=16;
Refresh;
end;

procedure TMyBitBtn.CMMouseLeave(var Message: TMessage);
begin
inherited;
Font.Color:=clBtnText;
Font.Size:=9;
Refresh;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
BT:=TMyBitBtn.Create(Self);
BT.Caption:='NewButton';
BT.Parent:=Self;
BT.Width:=150;
BT.Height:=50;
end;

end.
 
Tbutton的颜色并没有公开出来。
可以TLable(Button1).Color:=clBlue;
 
试了一下,可以改变字体的颜色,Font.Color:=clRed改为Color:=clRed; 后可以看到快速
的 Button颜色红了一下又改变会灰色,再试
procedure TMyBitBtn.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
inherited;
brush.Color:=clred;
end;
也不行!

 
这个问题以前讨论过的,用强制转换可以,因为button的canvas属性是只读的。
 
你们不用去试验了,不行的,如果要改变按钮的颜色只有重写CN_DRAWITEM消息.至于字体颜色嘛,用TBitbtn不用改什么不就可以了?
 
后退
顶部