Wie kann ich auf OnMouseEnter und OnMouseLeave Events reagieren?


Wie kann ich auf MouseEnter und MouseLeave reagieren, wenn es diese Events in einer Komponente nicht gibt?

Ganz einfach: Man muß die entsprechenden Windows nachrichten selber anfangen, hier am Beispiel eines tEdit:

interface

type
  TTestEdit = class(TEdit)
  private
    FOnMouseEnter: TNotifyEvent;
    FOnMouseLeave: TNotifyEvent;
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  published
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  end;

implementation

  procedure TTestEdit.CMMouseEnter(var Message: TMessage);
  begin
    inherited;
    if not(csLoading in ComponentState) and Assigned(FOnMouseEnter) then begin
      FOnMouseEnter(Self);
    end;
  end;

  procedure TCustomdpEdit.CMMouseLeave(var Message: TMessage);
  begin
    inherited;
    if not(csLoading in ComponentState) and Assigned(FOnMouseLeave) then begin
      FOnMouseLeave(Self);
    end;
  end;
Delphi 1 Delphi 2 Delphi 3 Delphi 4
nicht getestet Version nicht betroffen getestet

siehe auch:


Delphi FAQ