我要的并不是在窗体的客户区(client)来实现拖动,而是通过窗体里面放一个
Label控件,点击Label控件实现对窗体的拖动?谁能帮我实现???
以下是对窗体的客户区(client)来实现拖动:
type
procedure WMNCHitTest(var M:TWMNCHitTest); message wm_NCHitTest;
procedure TSetup.WMNCHitTest(var M:TWMNCHitTest);
begin
inherited;
if M.Result=htClient then M.Result:=htCaption;
end;

解决方案 »

  1.   

    procedure TForm1.Label1MouseDown(...)
    begin
      ReleaseCapture();
      Form1.Perform( WM_SYSCOMMAND, $F012, 0 );
    end;
      

  2.   

    “直接拖动不出现虚框”,那不是编程的问题,是整个Windows环境的设置。
      

  3.   

    在窗体效果里设置.
    但我觉得这些也是调用API函数实现的吧.
      

  4.   

    procedure TForm1.Label1MouseDown(...)
    begin
      ReleaseCapture();
      Form1.Perform( WM_SYSCOMMAND, $F012, 0 );
    end;
      

  5.   

    procedure TForm1.Label1MouseDown(...)
    begin
      ReleaseCapture();
      Form1.Perform( WM_SYSCOMMAND, $F012, 0 );
    end;
      

  6.   

    procedure TForm1.Label1MouseDown(...)
    begin
      ReleaseCapture();
      Form1.Perform( WM_SYSCOMMAND, $F012, 0 );
    end;
      

  7.   

    type
      TForm1 = class(TForm)
      procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;........implementationprocedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
    begin
    inherited; { 调用默认的事件处理程序 }
    if M.Result = htClient then M.Result := htCaption;
    {如果是在Client区让Windows认为是在Caption区 }
    end;{$R *.dfm}
      

  8.   

    出现虚框的:
    procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      ReleaseCapture();
      Form1.Perform( WM_SYSCOMMAND, $F012, 0 );
    end;
    不出现虚框的,你的在label1的onmousedown和onmousemove和onmouseup里分别写代码:
    interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        procedure Label1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Label1MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
      private
        { Private declarations }
        bdown:boolean;   //定义局部变量
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      bdown:=True;
    end;procedure TForm1.Label1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
     bdown:=False;
    end;procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if not bdown then Exit;
      self.Left:= self.Left+x;
      self.top:=self.top+y;
    end;end.
      

  9.   

    还不能实现我所想要的,楼上的大哥能不能在帮帮我,我试过你的代码了,
    出现以下问题,因为我把这个label作为普通的标题栏来使用,但我拖动时,Mouse总是往左上角跑,还有就是我用右击以后,离开窗体以后,再接近它时,它总是跑开。
    我想要的功能要跟这完全一样的:
    begin
      ReleaseCapture();
      Form1.Perform( WM_SYSCOMMAND, $F012, 0 );
    end;
    就是不要出现虚框,直接跟着Mouse一起拖动(Windows优化大师大家都用过吧,就是实现它那样的标题栏效果)?????
      

  10.   

    self.Left:= self.Left+x;
      self.top:=self.top+y;还有判断拖动后的位置与现在位置的方向,然后确定是加还是减。再加一个判断是不是鼠标的右键。代码写不出来。呵呵,你可以试一下!