拖动无标题窗口

方法一:
适用于托拽无标题栏的文字提示浮动小窗口(因如果使用PIC作为BTN的话会影响到PIC的Click事件获得)
//当鼠标拖动时Windows 首先会向鼠标
//下的窗口发送一个 wm_nchittest 消息,窗口收到这个消息
//后再由窗口的消息处理函数进行处理,消息处理函数将会返
//回一个整数表示鼠标正处于窗口的什么部位。大家只需要知
//道的是处理函数返回2,表示鼠标正处于窗口的标题栏上。
//根据这一点,我们只要截获这条消息,然后直接返回2。
//这样不管鼠标真正位于窗口的什么部位,WINDOWS 一律认为
//鼠标位于标题栏上。因此,用户自然可以拖动窗口。
procedure WMNCHitTest(var Msg:TWMNCHitTest); message WM_NCHITTEST;

procedure TForm1.WMNCHitTest(var Msg:TWMNCHitTest);
begin
  DefaultHandler(Msg);
  if Msg.Result = HTCLIENT then
  Msg.Result:= HTCAPTION;
end;
 
方法二:
比较好用,可以用于自定窗口制作,简单的并不会对其它控件有影响。
//直接在MouseDown事件中使用
  procedure   TForm1.Button1MouseDown(Sender:   TObject;   Button:   TMouseButton;   
  Shift:   TShiftState;   X,   Y:   Integer);   
  begin  
 //WINAPI释放鼠标
  ReleaseCapture;
  //发送系统消息,通知窗口标题栏被按下,之后就可以拖了  
  SendMessage(Handle,WM_SYSCOMMAND,$F012,0); 
  end; 
posted @ 2014-10-20 23:34  ksoft  阅读(190)  评论(0编辑  收藏  举报