我要的并不是在窗体的客户区(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;
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;
begin
ReleaseCapture();
Form1.Perform( WM_SYSCOMMAND, $F012, 0 );
end;
但我觉得这些也是调用API函数实现的吧.
begin
ReleaseCapture();
Form1.Perform( WM_SYSCOMMAND, $F012, 0 );
end;
begin
ReleaseCapture();
Form1.Perform( WM_SYSCOMMAND, $F012, 0 );
end;
begin
ReleaseCapture();
Form1.Perform( WM_SYSCOMMAND, $F012, 0 );
end;
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}
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.
出现以下问题,因为我把这个label作为普通的标题栏来使用,但我拖动时,Mouse总是往左上角跑,还有就是我用右击以后,离开窗体以后,再接近它时,它总是跑开。
我想要的功能要跟这完全一样的:
begin
ReleaseCapture();
Form1.Perform( WM_SYSCOMMAND, $F012, 0 );
end;
就是不要出现虚框,直接跟着Mouse一起拖动(Windows优化大师大家都用过吧,就是实现它那样的标题栏效果)?????
self.top:=self.top+y;还有判断拖动后的位置与现在位置的方向,然后确定是加还是减。再加一个判断是不是鼠标的右键。代码写不出来。呵呵,你可以试一下!