delphi控件联动

问题描述:新建delphi工程,在Form1中放置Panel1控件,并在Panel1中并排放置Label1和Edit1控件。要求:1. 拖动鼠标时,Label1和Edit1会随鼠标而动,但其相对位置不变;2. Label1和Edit1始终在Panel1的边界内移动。

代码:

var
  G_Can_Move: boolean;  //用于控制只有当鼠标按下时才能移动
  G_X, G_Y: integer;  //用于保存鼠标按下时的位置,
                      //如果不考虑这个点,鼠标第一下移动时Label1和Edit1的位置变化会比较大

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,  //鼠标移动事件
  Y: Integer);
begin
  if(G_Can_Move = true) then
  begin
    if not((Label1.Top + Y - G_Y) < 0) and not((Edit1.Top + Y - G_Y) < 0)  //上边界
      and not ((Label1.Top + Y - G_Y + Edit1.Height) > Panel1.Height) then  //下边界
    begin
      Label1.Top:= Label1.Top + Y - G_Y;
      Edit1.Top:= Edit1.Top + Y - G_Y;
    end; //if

    if not((Label1.Left + X - G_X) < 0)  //左边界
      and not((Label1.Left + X - G_X + Label1.Width + Edit1.Width + (Edit1.Left - Label1.Left -Label1.Width)) > Panel1.Width)  //右边界
    then
    begin
      Label1.Left:= Label1.Left + X - G_X;
      Edit1.Left:= Edit1.Left + X - G_X;
    end; //if
  end; //if(G_Can_Move = true)
end;

procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;  //鼠标按下事件
  Shift: TShiftState; X, Y: Integer);
begin
  G_Can_Move:= true;  //能移动
  //鼠标按下时的位置

  G_X:= X;
  G_y:= Y;
end;

procedure TForm1.Label1MouseUp(Sender: TObject; Button: TMouseButton;  //放开鼠标时
  Shift: TShiftState; X, Y: Integer);
begin
  G_Can_Move:= false;  //不能移动
end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值