超级难题!有兴趣的请进!
我动态继承了一个MyButton:TSpeedButton,现在想将Button的样子改变一下,例如变成圆的,鼠标移动到上面则变为红色,按下变为绿色。请问该覆盖哪几个函数?最好能有一些代码!望各位大侠解惑!
问题点数:0、回复次数:4Top
1 楼ihihonline(潇潇->戒烟)回复于 2003-10-04 01:13:19 得分 0
MouseDwon
MouseUp
直接写这两个事件就可以。
----------------------------------------------------------
事太多、心太乱
Top
2 楼crossbow(【以无形为形】)回复于 2003-10-04 09:35:16 得分 0
CMMouseEnter
CMMouseLeave消息Top
3 楼crossbow(【以无形为形】)回复于 2003-10-04 09:38:08 得分 0
procedure CNMeasureItem(var Message: TWMMeasureItem); Message CN_MEASUREITEM;
procedure CNDrawItem(var Message: TWMDrawItem); Message CN_DRAWITEM;
procedure CMFontChanged(var Message: TMessage); Message CM_FONTCHANGED;
procedure CMEnabledChanged(var Message: TMessage); Message CM_ENABLEDCHANGED;
procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); Message WM_LBUTTONDBLCLK;
procedure CMMouseEnter(var Message:TMessage); Message CM_MOUSEENTER;
procedure CMMouseLeave(var Message:TMessage); Message CM_MOUSELEAVE;
procedure WMKeyDown (var Message:TMessage); Message WM_KEYDOWN;
procedure WMKeyUp (var Message:TMessage); Message WM_KEYUP;
procedure WMMove (var Message:TMessage); Message WM_MOVE;Top
4 楼hiflower(花)回复于 2003-10-04 10:11:51 得分 0
楼主概念错误! 没有动态继承的概念。
按你的写法其实是 动态创建 一个 TSpeedButton 对象。
要继承,必须定义一个新的类:
TMySpeedButton=class(TSpeedButton)
protected
procedure Paint;override;
private
FOnMouseDown:TMouseEvent;
procedure MouseDown(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
property OnMouseDown:TMouseEvent read FOnMouseDown write FOnMouseDown;
end;
var
MySpeedButton:TMySpeedButton;
procedure TMySpeedButton.Paint;
begin
//inherited; 不要继承父类的方法
Canvas.Ellipse(0,0,50,50);// 画你自己的形状
inherited OnMouseDown:=MouseDown; 截取父类的 MouseDown 事件
end;
procedure TMySpeedButton.MouseDown(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
//你的处理
if Assigned(OnMouseDown) then
OnMouseDown(Sender,Button,Shift,X,Y);// 执行客户的 OnMouseDown 事件
end;
// OnMouseUp 事件处理同上Top




