由于需要我做了一个无标题的窗体,但又需要可以用鼠标拖动,窗体上有一个image
我是这样做的:(bMoveWindow,OldX,OldY都是全局变量)procedure Tmainform.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
iy,ix:boolean;
begin
OldX := X;
OldY := Y;
bMoveWindow := true
end;procedure Tmainform.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
bMoveWindow := false;
end;procedure Tmainform.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var nTop, nLeft, nHeight, nWidth: integer;begin
if bMoveWindow = true then
begin
nTop := Top + (Y - OldY);
nLeft := Left + (X - OldX);
nHeight := Height;
nWidth := Width;
MoveWindow(mainform.Handle, nLeft, nTop, nWidth, nHeight, true); end;end;现在的问题是,我按下鼠标左键窗体就会剧烈闪烁,鼠标拖动的效果很差,请指教!
我是这样做的:(bMoveWindow,OldX,OldY都是全局变量)procedure Tmainform.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
iy,ix:boolean;
begin
OldX := X;
OldY := Y;
bMoveWindow := true
end;procedure Tmainform.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
bMoveWindow := false;
end;procedure Tmainform.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var nTop, nLeft, nHeight, nWidth: integer;begin
if bMoveWindow = true then
begin
nTop := Top + (Y - OldY);
nLeft := Left + (X - OldX);
nHeight := Height;
nWidth := Width;
MoveWindow(mainform.Handle, nLeft, nTop, nWidth, nHeight, true); end;end;现在的问题是,我按下鼠标左键窗体就会剧烈闪烁,鼠标拖动的效果很差,请指教!
procedure wmnchittest(var msg:twmnchittest);
然后写代码
procedure TForm1.wmnchittest(var msg:twmnchittest);
begin
inherited;
if (htclient=msg.result) then msg.result:=htcaption;
end;
搞定
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
SetCapture(Handle);
end;
procedure wmnchittest(var msg:twmnchittest);message wm_nchittest;
然后写代码
procedure TForm1.wmnchittest(var msg:twmnchittest);
begin
inherited;
if (htclient=msg.result) then msg.result:=htcaption;
end;
测试环境Delphi7+Windows 2000 Server (SP3)unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;type
TForm1 = class(TForm)
Image1: TImage;
private
{ Private declarations }
procedure wmnchittest(var msg:twmnchittest); message WM_NCHITTEST;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.wmnchittest(var msg:twmnchittest);
begin
inherited;
if (htclient=msg.result) then msg.result:=htcaption;
end;
end.
DelphiBoy2003(我是李逍遥) 的少了“message WM_NCHITTEST;”
procedure wmnchittest(var msg:twmnchittest); message WM_NCHITTEST;当然不行!
我需要在移动后仍可以激发mousemove事件
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 1);
end;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(Handle, WM_SYSCOMMAND, $F012, 0);
end;在Image1的MouseDown中输入上述代码。
我的贴在前面耶:-)
begin
inherited;
if (htclient=msg.result) then msg.result:=htcaption;
end;中的htclient需换成HTSIZE才能满足我得要求!!