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.

解决方案 »

  1.   

    即使把Inherited屏蔽掉,也还是死循环。
      

  2.   

    不是死循环就怪了。
    你Mouse一Move,就触动消息,然后你移动鼠标去关闭对话框,那么又触动了消息。
    象MouseMove这种频繁出现的消息,写这样的代码不太应该。
    就像在Delphi集成环境中非常难调试WM_PAINT一样。
      

  3.   

    每次移动鼠标都会响应消息,当然不行了
    把WM_MouseMove换成WM_LBUTTONDOWN之类的消息试一试
      

  4.   

    不,不,不,我是移动鼠标后,靠键盘去关闭Showmessage的,这样也触发:wm_MouseMove?
      

  5.   

    鼠标的每个X,Y象素点发生变化都会导致WM_mousemove的触发。你移动一下鼠标,不知道要触发多少个MOUSEMOVE.
      

  6.   

    要观察消息的变化,用Winsight32或者SPY++看看。
      

  7.   

    To chechy(chechy):那总有终止的时候呢,不可能是死循环的。
      

  8.   

    To chechy(chechy):你进来看看呢。
      

  9.   

    我移动一小格,就触发了上万次的WM_MouseMove吗?
      

  10.   

    那么你用Winsight32监视一下你的程序,看看为什么会有那么多WM_MOUSEMOVE。
      

  11.   

    chechy(chechy):监视不到,你能不能提我调试调试呢?谢谢
      

  12.   

    chechy(chechy):这我也知道,但是我这边真的监视不到,而且,我必须要用到WM_MouseMove消息。再一次的谢谢你了。
      

  13.   

    不一定要用showmessage()才能看到结果
    在form 上放一个label
    把showmessage()改成
    label.Caption := intToStr(strToInt(label.Caption)+1);
    不就可以了么
      

  14.   

    >>不,不,不,我是移动鼠标后,靠键盘去关闭Showmessage的,这样也触发:wm_MouseMove? 你需要把Mouse移动到窗体之外,然后用Keyboard关闭ShowMessage就可以了。你其实可以换一种方式啊,比如修改Caption就可以了,没有必要一定用ShowMessage的啊!或者写入一个文件。简单问题~~~~~~~~`
      

  15.   

    呵呵,我发现每次焦点的转换居然也会引发WM_MOUSEMOVE消息。另外,更加有趣的是,用鼠标去按按钮反而不是死循环,而且缓缓地移动,虽然WINSIGHT显示一堆消息,但是ShowMessage反而在短时间内没有出来。
      

  16.   

    我来解释一下吧!供大家参考!
    这个事件并没有错,只是wolfAone(北方狼)你用错了检测的方法,你用showmessage打开一个对话框时,焦点已经到了这个对话框上,此时,你再怎么移动鼠标都不会发生WMMouseMove事件的!
    当你的鼠标在form上,同时你用键盘关闭对话框,那么,焦点将从对话框转到form上,而此时
    鼠标虽然没动,但由于焦点的变化,产生了WMMouseMove事件!
      

  17.   

    没有了对话框,你在form上移动时将不断产生WMMouseMove事件事件,当然,当你在form之外移动时,是不会触发WMMouseMove事件的!
    经过检测是这样的!
      

  18.   

    只要对话框存在,你的鼠标在怎么移都不会产生WMMouseMove事件事件!
      

  19.   

    wolfAone(北方狼) 我不是已经帮你解释了吗?还不懂! 
      

  20.   

    你的意思是:焦点改变也会触发WM_MouseMove消息?
    如果是这样的话,真的是一个死循环了,谢谢你。
    再一次谢谢各位。