`
zero.fire
  • 浏览: 34558 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

通过控件移动窗体

 
阅读更多

所谓通过控件移动窗体,常用于无边框窗口的移动,需要通过拖动某个控件来使整个窗体移动。

简单总结下两种方法

方法1:HTCLIENT转换为HTCAPTION

函数定义

   private
    { Private declarations }
    procedure  WMNCHitTest(var Msg:TWMNCHitTest);message  WM_NCHITTEST;

函数实现

procedure TmForm.WMNCHitTest(var Msg:TWMNCHitTest);
var
  p: TPoint;
begin
  DefaultHandler(Msg);

  
if  Msg.Result  =  HTCLIENT then begin
  with JvHTLabel1 
do  begin
    p.X:
=  Left; p.Y: =  Top;
    p :
=  Application.MainForm.ClientToScreen(p);
    
if  (Msg.XPos  >  p.X) and (Msg.XPos  <  p.X  +  Width) and
       (Msg.YPos 
>  p.Y) and (Msg.YPos  <  p.Y  +  Height) then
    begin
      Msg.Result:
=  HTCAPTION;
      SetCursor(LoadCursor(
0 ,IDC_SIZEALL));
    end;
  end;
  end;
end;

方法2:发送系统消息

给目标控件添加OnMouseDown消息处理函数,实现方法很简单

procedure TmForm.JvHTLabel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  SetCursor(LoadCursor( 0 ,IDC_SIZEALL));
  Perform(WM_SYSCOMMAND,$F012, 0 );
end;
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics