如:
在一个FORM中移动一个Label,只要处理:OnMouseDown移动标志,原始坐标; OnMouseMove判断,新坐标定位,OnMouseUp复归,基本上控件都是连续性的移动;但是如果移动Label很多时,会出现停止状态;
如何实现跳跃式的移动:即在OnMouseMove中只是实现虚拟方框的移动,在OnMouseUp触发式再定位新位置,这样移动过程中不再有令人窒息的停止。
可是OnMouseMove中如何实现虚拟方框的移动,自己画,感觉不是很理想!欢迎大家讨论!!!
在一个FORM中移动一个Label,只要处理:OnMouseDown移动标志,原始坐标; OnMouseMove判断,新坐标定位,OnMouseUp复归,基本上控件都是连续性的移动;但是如果移动Label很多时,会出现停止状态;
如何实现跳跃式的移动:即在OnMouseMove中只是实现虚拟方框的移动,在OnMouseUp触发式再定位新位置,这样移动过程中不再有令人窒息的停止。
可是OnMouseMove中如何实现虚拟方框的移动,自己画,感觉不是很理想!欢迎大家讨论!!!
---- 拖动之前,记录鼠标原始位置OldPoint
----- 拖动结束,用鼠标现位置NowPoint减去原位置OldPoint,得到鼠标位移量
---- 将位移量全部更新到TPoint数组的每个元素中去
---- 根据更新后的TPoint数组,重新设定Label们的左上角顶点
Label只是想作为移动非TWinControl一个例子;
要想标志Label选中可使用 其Tag属性做标志,变个颜色来区别,
OnMouseMove中循环判断标志,使用SetBounds来定位;即可!
我的问题是当有很多Label时,连续的移动会出现停止现象,
所以想在OnMouseUp再使用SetBounds来定位,而在OnMouseMove只是画出
各个Label的虚框来移动好判断对齐
来实现移动虚框,可是此虚框不是很完美,且很容易出现带X的浮动窗口怎样控制才好呢?
拖放停靠时不出现带叉的标题栏,好办:
{代码作者:季世平}
procedure 控件EndDock(Sender, Target: TObject; X, Y: Integer);
begin
TControl(Sender).HostDockSite := TWinControl(Pointer($FFFFFFFF));
end;
本来众多Label重画已经给系统增加负担了,你再画框....