我写了一个TImageButton = class(TImage)
protected
    procedure DoMouseLeave; override;
提示[DCC Error] ImageButton.pas(24): E2137 Method 'DoMouseLeave' not found in base class但是我查了TImage = class(TGraphicControl),TGraphicControl = class(TControl),而TControl里的Protected里有一个
procedure DoMouseLeave; virtual;这是为什么?

解决方案 »

  1.   

    TImage中没有'DoMouseLeave'方法,怎么覆盖,父类的父类中的虚方法能覆盖吗?
      

  2.   


    父类的父类的虚方法不能覆盖吗?
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer);override;这个为什么就能成功?这个MouseDown同样是在TControl的Proteced里的
      

  3.   

    DoMouseLeave是给Delphi.net用的,Delphi中用不了,不过,下面的消息函数procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;可实现同样的功能,当Message.LParam = 0成立时,添加你自己的代码,然后,调用inherited就可以了。
      

  4.   


    Message.LParam = 0是什么意思?
      

  5.   

    由于TControl在收到CM_MOUSELEAVE后会自动将这个消息传递给其父窗体,而Message.LParam就设的是自己的地址,所以,通过Message.LParam = 0就可以判断出收到CM_MOUSELEAVE消息的控件是不是第一个处理的控件。