我在mousedown里做的记录起始点,在mousemove里做了控件的移动,所以在mousedown里记录下的点就是mouseup的点,不能记录下mousedown的点,请问各位有没有全局变量,可以在mousedown里记录下mouse移动的起始点的位置?先谢了

解决方案 »

  1.   

    var
     DownX,DownY:Integer;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      DownX:=x;
      DownY:=Y;
    end;
      

  2.   

    给你个例子!
      private
        oldx, oldy: integer;
        canmove: boolean;
        { Private declarations }
      public
        { Public declarations }
        //在这里声明也行
      end;procedure Tfrmxmtp.Panel1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      if button = mbleft then
      begin
        canmove := true;
        oldx := x;
        oldy := y;
      end;
    end;procedure Tfrmxmtp.Panel1MouseMove(Sender: TObject;
      Shift: TShiftState; X, Y: Integer);
    begin
      if canmove then
      begin
        panel1.Top := panel1.Top + y - oldy;
        panel1.Left := panel1.Left + x - oldx;
        if panel1.Left < 0 then
          panel1.Left := 0;
        if panel1.Top < 0 then
          panel1.Top := 0;
        if panel1.Top + panel1.Height > form1.Height then
          panel1.Top := form1.Height - panel1.Height;
        if panel1.Left + panel1.Width > form1.Width then
          panel1.Left := form1.Width - panel1.Width;
      end;
    end;procedure Tfrmxmtp.Panel1MouseUp(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      canmove := false;
    end;
      

  3.   

    var
     DownX,DownY:Integer;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      DownX:=x;
      DownY:=Y;
    end
    来迟了 DownX,DownY为全局变量
      

  4.   

    不对啊。在mousedown里这样记录下来后,又在mousemove里做移动,所以记录下来的点是mousemove里的值,在mouseup里做移动距离的计算时就显示是0.我想得到这个值,就是的不到.各位还有什么好方法吗?
      

  5.   

    var p : TPoint;GetCursorPos(p);p.x;
    p.y;
      

  6.   

    问题解决!!写的比较乱!!
    private
        oldx, oldy: integer;
        canmove: boolean;
        x1,x2,y1,y2,l:int64;
        { Private declarations }
      public
        { Public declarations }
        //在这里声明也行
      end;var
      Form1: TForm1;implementation{$R *.dfm}Function js(x1,x2,y1,y2:int64):int64;
    var
      x,y:int64;
      lengthl:real;
    begin
      x:=(x2-x1)*(x2-x1);
      y:=(y2-y1)*(y2-y1);
       lengthl := x+y  ;
      lengthl := sqrt(lengthl);
      Result:=trunc(lengthl);
    end;
    procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
       if canmove then
      begin
        panel1.Top := panel1.Top + y - oldy;
        panel1.Left := panel1.Left + x - oldx;
        if panel1.Left < 0 then
          panel1.Left := 0;
        if panel1.Top < 0 then
          panel1.Top := 0;
        if panel1.Top + panel1.Height > form1.Height then
          panel1.Top := form1.Height - panel1.Height;
        if panel1.Left + panel1.Width > form1.Width then
          panel1.Left := form1.Width - panel1.Width;
      end;
    end;procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);begin
      canmove := false;
        x2:=panel1.Left;
        y2:=panel1.Top;
        l:=js(x1,x2,y1,y2);
      showmessage(inttostr(l));
    end;procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if button = mbleft then
      begin
        canmove := true;
        oldx := x;
        oldy := y;
        x1:=panel1.Left;
        y1:=panel1.Top;
      end;
    end;
      

  7.   

    faint !不就是移动个控件嘛!!简单搞定!把如下代码放到任意要拖动的可视组件的MouseDown 的事件内即可!  if button=MBLeft then
      begin
        ReleaseCapture;
        SendMessage(TWinControl(Sender).Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
      end;