Delphi的窗体编程技巧──用鼠标拖动无标题窗口

Author: 王翔宇 Date: 2001年 20期

?牐牨喑痰氖焙颍惺蔽诵枰峤疤宓腂orderStyle设置为bsNone,即无标题窗体。但是这样一来,因为没有了标题栏,就无法拖动窗体了。其实,我们只需要用以下的方法,就可以实现平滑拖动窗体了。
  ?牐犜贠nMouseDown事件中加入
  ?牐燨ldX:=x;??
  ?牐燨ldY:=u;??
  ?牐犜贠nMouseMove事件中加入
  ?牐燜orm1.Left:=Form1.Left+x-Oldx;??
  ?牐燜orm1.Top:=Form1.Top+y-Oldy;??
  #1?牐犜创肴缦拢?
  ?牐爑nit Unit1;??
  ?牐爄nterface
  ?牐爑ses
  ?牐燱indows, Messages,SysUtils, Classes,Graphics,Controls,Forms, Dialogs;??
  ?牐爐ype
  ?牐燭Form1 = class(TForm)??
  ?牐爌rocedure FormMouseDown(Sender:TObject;Button:TMouseButton;??
  ?牐燬hift:TShiftState;X,Y,Integer);?牔?
  ?牐爌rocedure FormMouseMove(Sender:TObject;Button:TMouseButton;??
  ?牐燬hift:TShiftState;X,Y,Integer);??
  ?牐爌rivate
  ?牐牓? {Private declarations} ??
  ?牐爌ublic
  ?牐牓煟鸓rivate declarations} ??
  ?牐爀nd;??
  ?牐爒ar
  ?牐燜orm1:TForm1;??
  ?牐燨ldX,OldY:integer; //定义全局变量
  ?牐爄mplementation
  ?牐牓煟?$R *.DFM}??
  ?牐爌rocedure TForm1.FormMouseDown(Sender:TObject;Button:TMouseButton;
  ?牐燬hift:TShiftState;X,Y:Integer);
  ?牐燽egin
  ?牐燨ldX:=x;??
  ?牐燨ldY:=y;??
  ?牐爀nd;??
  ?牐爌rocedure TForm1.FormMouseMove(Sender:TObject;Button:TMouseButton??
  ?牐燬hift:TShiftState;X,
  ?牐燳:Integer);?牔?
  ?牐燽egin
  ?牐爄f ssleft in shift then  //按下鼠标左键
  ?牐燽egin
  ?牐燜orm1.Left:=Form1.Left+x-Oldx;??
  ?牐燜orm1.Top:=Form1.Top+y-Oldy;??
  ?牐爀nd;??
  ?牐爀nd;??
  ?牐爀nd.
  ?牐犠ⅲ阂陨洗朐贒elphi5.0、Win98 SE中测试通过。