如:
   在一个FORM中移动一个Label,只要处理:OnMouseDown移动标志,原始坐标; OnMouseMove判断,新坐标定位,OnMouseUp复归,基本上控件都是连续性的移动;但是如果移动Label很多时,会出现停止状态;
  如何实现跳跃式的移动:即在OnMouseMove中只是实现虚拟方框的移动,在OnMouseUp触发式再定位新位置,这样移动过程中不再有令人窒息的停止。
  可是OnMouseMove中如何实现虚拟方框的移动,自己画,感觉不是很理想!欢迎大家讨论!!!

解决方案 »

  1.   

    1、想知道楼主是如何实现多选Label并同时使用OnMouseMove移动的,恳请出示代码供学习,谢谢!2、如果要移动Label,可否换种思路,使用“停靠”功能?3、即使楼主不想使用停靠,那也可以使用一个TPoint数组来实现。具体思想是:    ---- 声明一个Tpoint数组,保存要移动的多个Label的左上角顶点位置
        ---- 拖动之前,记录鼠标原始位置OldPoint
       ----- 拖动结束,用鼠标现位置NowPoint减去原位置OldPoint,得到鼠标位移量
        ---- 将位移量全部更新到TPoint数组的每个元素中去
        ---- 根据更新后的TPoint数组,重新设定Label们的左上角顶点
      

  2.   

    感谢楼上!
    Label只是想作为移动非TWinControl一个例子;
    要想标志Label选中可使用 其Tag属性做标志,变个颜色来区别,
    OnMouseMove中循环判断标志,使用SetBounds来定位;即可!
    我的问题是当有很多Label时,连续的移动会出现停止现象,
    所以想在OnMouseUp再使用SetBounds来定位,而在OnMouseMove只是画出
    各个Label的虚框来移动好判断对齐
      

  3.   

    其实可以用用DragKind := dkDock;
    来实现移动虚框,可是此虚框不是很完美,且很容易出现带X的浮动窗口怎样控制才好呢?
      

  4.   


    拖放停靠时不出现带叉的标题栏,好办:
    {代码作者:季世平}
    procedure 控件EndDock(Sender, Target: TObject; X, Y: Integer);
    begin
      TControl(Sender).HostDockSite := TWinControl(Pointer($FFFFFFFF));
    end;
      

  5.   

    别的就不懂啦...呵呵不过感觉最好不要再自己画什么框了
    本来众多Label重画已经给系统增加负担了,你再画框....