How can I trigger an event when the mouse leaves my control?

How to create an OnMouseLeave event?

+5
source share
2 answers

Another alternative to Andreas solution is to use a CM_MOUSELEAVEVCL message that is already defined in delphi 7.

check this example using the interpolator class for TButton

type
  TButton = class(StdCtrls.TButton)
  private
    FOnMouseLeave: TNotifyEvent;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  protected
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  end;


  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  private
     procedure ButtonMouseLeave(Sender: TObject);
  public
  end;

//handle the message and call the event handler
procedure TButton.CMMouseLeave(var Message: TMessage);
begin
  if (Message.LParam = 0) and Assigned(FOnMouseLeave) then
      FOnMouseLeave(Self);
end;


procedure TForm1.ButtonMouseLeave(Sender: TObject);
begin
   //your code goes here   
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //assign the event
  Button1.OnMouseLeave:=ButtonMouseLeave;
end;
+8
source

You can tell Windows to send a message, namely a message WM_MOUSELEAVEwhen the mouse leaves the control. To do this, call the function TrackMouseEvent. TrackMouseEventSpecify a flag in the structure TME_LEAVE.

On request code:

, Windows, , :

procedure TMyControl.SetMouseEvent;
var
  tme: TTrackMouseEvent;
begin
  tme.cbSize := sizeof(tme);
  tme.dwFlags := TME_LEAVE;
  tme.hwndTrack := Self.Handle;
  TrackMouseEvent(tme);
end;

, , . mesage WM_MOUSELEAVE. WndProc ( ) WM_MOUSELEAVE.

procedure TMyControl.WndProc(var Message: TMessage);
begin
  inherited;
  case Message.Msg of
    WM_MOUSELEAVE:
      beep;
  end;
end;

, Windows , , , . SetMouseEvent WndProc, , TrackMouseEvent. , SetMouseEvent OnMouseMove :

procedure TMyControl.WndProc(var Message: TMessage);
begin
  inherited;
  case Message.Msg of
    WM_MOUSELEAVE:
      beep;
    WM_MOUSEMOVE:
      SetMouseEvent;
  end;
end;

, Delphi, Delphi 2009, ( , OnMouseLeave), , .

+6

All Articles