我在Button的MouseDown事件中有此按钮的拖动代码:
    ReleaseCapture;
    Button1.Perform(WM_SYSCOMMAND,$f012,0);
能时间按钮拖动.
但是我在Button的OnClick中的单击事件却不能用:
如写Showmessage('OK');
没有响应,请问怎么解决呢>?

解决方案 »

  1.   

    将Showmessage('OK');移到MOUSEDOWN事件中去
    procedure TForm2.Button1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      ReleaseCapture;
      Button1.Perform(WM_SYSCOMMAND,$f012,0);
      showmessage('ok');
    end;
      

  2.   

    To  lzy6204(学无止境) 
    你的方法虽然行
    但是我要求放在OnClick事件中响应啊
      

  3.   


    procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      //SetCapture(Handle);
      ReleaseCapture;
      Button1.Perform(WM_SYSCOMMAND,$f012,0);
      Button1.OnClick(Sender) ;
      inherited;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage('OK');
    end;
      

  4.   

    呵呵:)  我想应该是这样的,BUTTON的MOUSEDOWN 事件的触发先于ONCLICK事件。
    而你的MOUSEDOWN里写了Button1.Perform(WM_SYSCOMMAND,$f012,0);  估计是它在作怪,让以后的ONCLICK事件无法正常响应。。
      

  5.   

    请问楼上的,加inherited;的意图是什么?
    是不是必须把buttonclick的事件放在Button1MouseDown才行呢
    有没有不在Button1MouseDown中调用ButtonClick的方法
      

  6.   

    不好意思, 我上面写错了,应该是你的ReleaseCapture;调用直接导致ONCLICK事件失去响应,ReleaseCapture;
    其定义如下:
    function ReleaseCapture; external user32 name 'ReleaseCapture';
      你可以换一种拖动BUTTON的方式。
      

  7.   

    因为你的Button1.Perform(WM_SYSCOMMAND,$f012,0);这句代码中的$F012是一个ie魔数,所谓魔数就是一个Delphi本身没有定义的一个常量,但是用这个常量 和有一种意想不到的效果,而Perform是一个广播消息参数,这样Button1就接收到WM_SYSCOMMAND并且去处理这个消息函数去了,并没有接着去处理鼠标按下后Button1父类的默认操作,而inherited就是做这个用处的,不过用在这里好像并没有什么用!所以我这里明确的在OnMouseDown中调用onClick事件!这样就可以满足你的需求了
      

  8.   

    sorry,我刚才讲的内容中有一个地方有错!吃掉鼠标消息的不是Perform而是ReleaseCapture这个API函数,它会吃掉后面的鼠标消息!所以如果你想要触发OnClick事件你要么明确的调用OnClick事件(最简单而又行之有效和效率最高的方式)另外一种方式就是再次发送鼠标消息给Button1,让VCL来进行鼠标OnClick事件的触发!
      

  9.   

    ReleaseCapture 函数的功能是这样的
    该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理.捕获鼠标的窗口
    接收所有的鼠标输入,除非点击鼠标键时,光标热点在令一个线程的窗口中.按照它的功能所叙,那不就不是ReleaseCapture的影响么?