我动态继承了一个MyButton:TSpeedButton,现在想将Button的样子改变一下,例如变成圆的,鼠标移动到上面则变为红色,按下变为绿色。请问该覆盖哪几个函数?最好能有一些代码!望各位大侠解惑!

解决方案 »

  1.   

    MouseDwon
    MouseUp
    直接写这两个事件就可以。----------------------------------------------------------
    事太多、心太乱
        
      

  2.   

    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;
      

  3.   

    楼主概念错误! 没有动态继承的概念。
    按你的写法其实是 动态创建 一个 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 事件处理同上