unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
private
{ Private declarations }
procedure WMMouseMove(var Msg:TWMMouseMove);Message WM_MouseMove;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ TForm1 }
procedure TForm1.WMMouseMove(var Msg: TWMMouseMove);
begin
beep;
showmessage('鼠标移动了');
Inherited;
end;
end.
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
private
{ Private declarations }
procedure WMMouseMove(var Msg:TWMMouseMove);Message WM_MouseMove;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ TForm1 }
procedure TForm1.WMMouseMove(var Msg: TWMMouseMove);
begin
beep;
showmessage('鼠标移动了');
Inherited;
end;
end.
你Mouse一Move,就触动消息,然后你移动鼠标去关闭对话框,那么又触动了消息。
象MouseMove这种频繁出现的消息,写这样的代码不太应该。
就像在Delphi集成环境中非常难调试WM_PAINT一样。
把WM_MouseMove换成WM_LBUTTONDOWN之类的消息试一试
在form 上放一个label
把showmessage()改成
label.Caption := intToStr(strToInt(label.Caption)+1);
不就可以了么
这个事件并没有错,只是wolfAone(北方狼)你用错了检测的方法,你用showmessage打开一个对话框时,焦点已经到了这个对话框上,此时,你再怎么移动鼠标都不会发生WMMouseMove事件的!
当你的鼠标在form上,同时你用键盘关闭对话框,那么,焦点将从对话框转到form上,而此时
鼠标虽然没动,但由于焦点的变化,产生了WMMouseMove事件!
经过检测是这样的!
如果是这样的话,真的是一个死循环了,谢谢你。
再一次谢谢各位。