所谓通过控件移动窗体,常用于无边框窗口的移动,需要通过拖动某个控件来使整个窗体移动。
简单总结下两种方法
方法1:HTCLIENT转换为HTCAPTION
函数定义
private
{ Private declarations }
procedure WMNCHitTest(var Msg:TWMNCHitTest);message WM_NCHITTEST;
{ 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;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SetCursor(LoadCursor( 0 ,IDC_SIZEALL));
Perform(WM_SYSCOMMAND,$F012, 0 );
end;
无边框窗体移动技巧
本文介绍通过控件移动无边框窗体的两种方法:一是利用WM_NCHITTEST消息将窗体的客户端区域转为标题栏区域;二是通过发送系统消息实现控件拖动窗体的功能。
1469

被折叠的 条评论
为什么被折叠?



