在我的自定义组件中,如何增强鼠标输入和-leave事件?

use*_*105 4 delphi events custom-component

我正在制作一个派生TPanel的自定义Panel组件.

我希望我的新组件在OnMouseEnterOnMouseLeave事件上执行一些代码,但是,我不知道如何实现它.

我看到TPanel发布了OnMouseEnter,OnMouseLeave属性.

我如何覆盖这些并添加一些我自己的代码?

我的想法的例子:TMyPanel的
默认行为应该在组件本身.

on event OnMouseEnter do: Color := NewColor;
on event OnMouseLeave do: Color := OldColor;
Run Code Online (Sandbox Code Playgroud)

然后,我希望能够在运行时为这些事件分配一些功能.此分配在应用程序中完成.

.. TButton1.Click ..
begin
    MyPanel1.OnMouseEnter := DoSomethingMore;
    MyPanel1.OnMouseLeave := DoSomethingElse;
end;
Run Code Online (Sandbox Code Playgroud)

所以最后,当鼠标在新面板上时,它应该改变颜色并执行在DoSomethingMore过程中编写的其他一些操作.

谢谢

K.S*_*ell 9

Anoher方法是自己处理Windows消息:

type
  TMyPanel = class(TPanel)
  private
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  published
  end;

implementation

{ TMyPanel }

procedure TMyPanel.CMMouseEnter(var Message: TMessage);
begin
     // Do whatever your want before the event
     if Assigned(OnMouseEnter) then OnMouseEnter(Self);
end;

procedure TMyPanel.CMMouseLeave(var Message: TMessage);
begin
     // Do whatever your want before the event
     if Assigned(OnMouseLeave) then OnMouseLeave(Self);
end;
Run Code Online (Sandbox Code Playgroud)

编辑:请参阅下面的更好的VCL兼容版本.

  • 要调用继承的消息处理程序,您只需添加以下行:inherited; (2认同)