消息处理函数被重复相应,该怎么处理
消息处理函数被重复相应
新建一个 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.
新建一个 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.