消息处理函数被重复相应,该怎么处理

消息处理函数被重复相应
新建一个   TForm1   ,加一个   Button1
加过程
procedure       CMMouseLeave(var       Message:       TMessage);       message     CM_MouseLeave;


过程如下

procedure       TForm1.CMMouseLeave(var       Message:       TMessage);
    begin
            if       TObject(Message.LParam)       =       Button1       then
                      ShowMessage( '鼠标离开了 ');
    end;


会发现鼠标离开按钮时,会反复复执行该消息处理函数,请解释一下原因,及如何解决使其执行一次




------解决方案--------------------
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
wm_user_1 = wm_user + 1;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
private
{ Private declarations }
public
procedure CMMouseLeave(var Message: TMessage); message CM_MouseLeave;
procedure s(var Message: TMessage); message wm_user_1;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CMMouseLeave(var Message: TMessage);
begin
if TObject(Message.LParam) = Button1 then
begin
Memo1.Lines.Add( '鼠标离开了 ');
PostMessage(Handle, wm_user_1, 0, 0);
end;
end;

procedure TForm1.s(var Message: TMessage);
begin
ShowMessage( '鼠标离开了 ');

end;

end.