Показать сообщение отдельно
  #2  
Старый 22.03.2024, 20:03
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,020
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вообще, есть такой 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.

Что бы не создавать компонент и не регистрировать его, я просто засабклассил его прямо перед формой.
Ответить с цитированием