//鼠标移动处理事件,主要是实现控件移动
procedure TDesignForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
tmp_X,tmp_Y:integer;
begin
if sender=self then exit; //如果调用者是窗体本身则退出
if not IsDrag then exit; //如果没有在拖放状态(鼠标左键按下)
tmp_X:=(Sender as TGraphicControl).Left+X-X_Image; //计算被拖动控件的左坐标
tmp_Y:=(Sender as TGraphicControl).Top+Y-Y_Image; //计算被拖动控件的顶坐标
(Sender as TGraphicControl).Left:=tmp_X; //设定被拖动控件的新位置
(Sender as TGraphicControl).Top:=tmp_Y;
RepDgnForm.Now_X.caption:=IntToStr(tmp_X); //动态显示被拖动控件的当前坐标
RepDgnForm.Now_Y.caption:=IntToStr(tmp_Y);
end;
to free_knight:分别取除默认值外的值,DragKind设成dkDock,DragMode设成dmAutomatic,
就可以很方便地实现拖动。
to bubble:我不想用手工画的方式,因为拖动控件后,需要先把原来的线删掉,然后计算控件
的新位置,再联线。特别是如果控件很多,或者几个控件在水平方向上有重叠,还不太好处理。
我是想找一种处理类似问题的比较好的思路