Вообще, есть такой DoMouseLeave, но он "сидит" очень глубоко - в TWinControl. Просто обработай сообщение CM_MOUSELEAVE. Как-то так:
Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TButton = class(Vcl.StdCtrls.TButton)
private
FLeaveCount : Integer;
protected
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
end;
TForm1 = class(TForm)
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TButton }
procedure TButton.CMMouseLeave(var Message: TMessage);
begin
inherited;
Inc(FLeaveCount);
Caption := Format('Leave %d',[FLeaveCount]);
end;
end.
Что бы не создавать компонент и не регистрировать его, я просто засабклассил его прямо перед формой.