请问怎样用鼠标拖动一个 控件 在窗体中移动 ????????????例如:
 在窗体中放了一个  panel 控件 , 当鼠标在 panel 上按住鼠标左键时, 可以将 panel 控件 拖动到 任何地方  ,  放开左键就停止拖动。请问在delphi6下如何实现,请提供详细的代码,最好带中文注释!!谢谢

解决方案 »

  1.   

    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
        button1.Left:=x;
        button1.Top:=y;
    end;自己想一下下就行了,呵呵。。 类似
      

  2.   

    给你个简单的例子,没什么技巧
    ----------------------------
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        IsMouseDown :Boolean;
        DisX,DisY :Integer;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      IsMouseDown := True;  //鼠标键已经按下
      DisX := Mouse.CursorPos.X-TPanel(Sender).Left;   //得到鼠标当前的位置和Panel位置的差值
      DisY := Mouse.CursorPos.Y-TPanel(Sender).Top
    end;procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      IsMouseDown := False;  //鼠标键已经松开
    end;procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if IsMouseDown then    //只有鼠标按下时才改变位置
      begin
        TPanel(Sender).Top :=Mouse.CursorPos.Y-DisY;   //根据鼠标的位置变化实时变换Panel的位置
        TPanel(Sender).Left :=Mouse.CursorPos.X-DisX;  //(注:需要减去位置差值)
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Panel1.DoubleBuffered := True;
    end;end.
      

  3.   

    procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      ReleaseCapture;
      panel1.perform(WM_SysCommand, $F012, 0);end;
      

  4.   

    var
      Form1: TForm1;
      MoveEn:Boolean;
      XY:TPoint;
    implementation{$R *.DFM}procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if Button =mbLeft then
        begin
          MoveEn:=True;
          XY.x :=x;
          XY.y :=y;
        end;
    end;procedure TForm1.Label1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
          MoveEn:=False;end;procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if MoveEn then
        begin
          Label1.Left  :=Label1.Left +(x-XY.x);
          Label1.Top :=Label1.Top +(y-XY.y);
        end;end;
      

  5.   

    给个邮箱,给你发个Demo过去吧!
      

  6.   

    好的,最好有delphi6源代码 ,