各位热衷编程的好友们:
  在窗体上创建一个标签框,怎样才能实现移动标签框就像移动窗体标题栏一样,让窗体移动,希望大家能够帮助我解决这一问题,谢谢!

解决方案 »

  1.   

    var  iX0,iY0: integer;
    procedure TMainForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      iX0:=X;
      iY0:=Y;
    end;procedure TMainForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var iDeltaX,iDeltaY:integer;
    begin
      if ssLeft in Shift then
      begin
        iDeltaX:= X - iX0;
        iDeltaY:= Y- iY0;
        if iDeltaX<>0 then
          Form1.Left:=Form1.Left+iDeltaX;
        if iDeltaY<>0 then
          Form1.Top:=Form1.Top+iDeltaY;
      end;
    end;上面的代码就能用鼠标移动窗体了,你再加一点代码让只有鼠标停在Label上时上面的事件才生效不就可以了?
      

  2.   

    ReleaseCapture
    SendMessage(form1.handle, WM_NCLBUTTONDOWN, HTCAPTION, 0)
      

  3.   

    这个对你有帮助,你要修改为label上的事件
    -------------------------------------------------------
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      HTTPApp, SvcMgr, ExtCtrls, StdCtrls, Menus;type
      TForm1 = class(TForm)
        Image1: TImage;
        PopupMenu1: TPopupMenu;
        C1: TMenuItem;
        procedure FormCreate(Sender: TObject);
        procedure FormResize(Sender: TObject);
        procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure C1Click(Sender: TObject);
      private
        { Private declarations }
        OriginalPos:TPoint;    // 记录原始位置
        CurrentPos:TPoint;     // 记录当前位置
        DownPos:TPoint;        // 记录鼠标按下时位置
        MouseLButtonDown:Boolean;   // 标记鼠标左键是否按下
      public    { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    var
       hr :THandle;
    begin
         MouseLButtonDown:=False;
         // 创建一个圆形窗口
         hr:=CreateEllipticRgn(0,0,Width,Height);
         SetWindowRgn(Handle,hr,True);
    end;procedure TForm1.FormResize(Sender: TObject);
    var
        hr :THandle;
    begin
         // 刷新圆形窗口
         hr:=CreateEllipticRgn(0,0,width,height);
         setwindowrgn(handle,hr,true);
    end;procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
         OriginalPos.x:=Form1.Left;         // 记录下原始坐标位置
         OriginalPos.y:=Form1.Top;
         DownPos.x:=X;                      // 鼠标按下的位置
         DownPos.y:=Y;
         DownPos:=ClientToScreen(DownPos);   // 将客户区坐标转换为屏幕坐标
         if Button = mbLeft then
              MouseLButtonDown:=True;
    end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
         if MouseLButtonDown then
         begin
              CurrentPos.x:=X;
              CurrentPos.y:=Y;
              CurrentPos:=ClientToScreen(CurrentPos);  // 将客户区坐标转换为屏幕坐标
              // 确定窗体的新位置
              Form1.Left:=OriginalPos.x+(CurrentPos.x-DownPos.x);
              Form1.Top :=OriginalPos.y+(CurrentPos.y-DownPos.y);
         end;
    end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
         MouseLButtonDown:=False;        // 鼠标左键弹起
    end;procedure TForm1.C1Click(Sender: TObject);
    begin
         Close;  // 关闭程序
    end;end.
      

  4.   

    在Label1的OnMouseDown事件中写如下代码:
    procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      ReleaseCapture;
      SendMessage(Handle,WM_SYSCOMMAND,$F012,0);
    end;