怎样重载 TBitBtn 的 Paint 过程,我想重画一个按钮边框。(100分)

  • 主题发起人 主题发起人 乖乖兔
  • 开始时间 开始时间

乖乖兔

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样重载 TBitBtn 的 Paint 过程,我想重画一个按钮边框。

不知是否还有其它办法做到。

我不要 TSpeedButton 类,因为此类不能用键盘得到焦点!
 
type
TMyBitBtn=class(TBitBtn)
public
procedure paint;override;
.........

???
 
补充一点, 把TBitBtn Paint部分的 Source Copy 过来,再改一下就可以了。
 
不要copy过来,用inherited最好,继承以前的代码这才是面向对象。
 
可是 TBitBtn 哪有 Paint 这个方法呀。
只有DrawItem,但好象这个方法不能重载。
 
procedure TForm1.Button2Click(Sender: TObject);

var

c:TCanvas;

begin

c:=TControlCanvas.Create;

TControlCanvas(c).Control:=Button2;

c.Brush.Style:=bsClear;

c.Pen.Color:=clBlue;

c.Rectangle(5,5,15,15);

c.Free;

end;
 
首先把TBitBtn的源码看懂了,然后将他的源码拷贝出来,在它Paint的地方Paint多好,
还可以多学点其他的东西。
 
重写CN_DRAWITEM消息函数,这样
procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
.
.
.
procedure CNDrawItem(var Message: TWMDrawItem);
begin
inherited;//这句就会自动调用DrawItem
//在这里做你想做的事
end;
 
接受答案了.
 

Similar threads

D
回复
0
查看
881
DelphiTeacher的专栏
D
D
回复
0
查看
850
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部