这又不难,可以响应
WM_LBUTTONDOWN 后SetCapture(当然不要忘了一个哨兵变量)
WM_MOUSEMOVE 改位置(注意要ClientToScreen)
WM_LBUTTONUP 后ReleaseCapture

解决方案 »

  1.   

    OnMouseDown ( mousedown:=true; oldx:=x,oldy:=y; oldleft:=MyButton.Left; ...top..)
    OnMouseMove { if (mousedown) then begin MyButton.Left:=oldleft+x-oldx;...   end;}
    OnMouseUp  {  mousedown:=false }
    中设置,就可以了。
      

  2.   

    那要那么麻烦:
    procedure dragcontrol(aControl:TWincontrol);
    const sc_dragmove=$f012;
    begin
     releasecapture;
     acontrol.Perform(wm_syscommand,sc_dragmove,0);
    end;在你要拖动的地方调用即可!例如:
    你可以在button1的Mousedown中调用:dragcontrol(button1);
      

  3.   

    Kingrong:
      1、那我用什么方法让BUTTON1激活起来
      2、用什么方法使记意移动过的BUTTON1
      

  4.   

    哎,我只是举一个例子而已,要激活Button1很简单啊,用空格就可以,要记忆移动过的控件,你可以声明一个数组,保存起来就可以了。
      

  5.   

    去装一套dreams控件吧,连inspector都有了:)
      

  6.   

    HDELPHI:
       DREAMS到那里DOWNLOAD有有边DELPHI5的控件?