如何拖动没有标题栏的窗体??
解决方案 »
- 怎么把label1.caption的4个数字两两分配到edit1和edit2
- 怎样让fastreport只打印客户选择的记录
- 急,在线等,高手请进
- 急求救:idudpclient 发送数据报错误 :Socket Error # 10040 message too long
- 怎样才能使一个Frame在设计时期就添加到一个Form上面去?
- 截获键盘0~9的输入,把其输入变成英文,怎么做呀?
- 在奇迹(MU)中弹出一个外挂窗口的问题
- NetUserEnum API 的封装问题
- 散分,来来来,来者有分,up也有分,呵呵!
- SQL和ACCESS支持的sql语句有何不同啊!!
- 我看到这里的变了,什么都变了,顺便测试一下人气,我怀疑CSDN的下一步……
- 请问,如何列举出所有的进程?包括隐藏的!
procedure TForm1.WMNCHITTEST(var msg: TWMNCHITTEST);
var
pt: TPoint;
begin
pt := ScreenToClient(Point(msg.XPos,msg.YPos));
if(pt.y<24) then msg.Result := HTCAPTION
else msg.Result := HTCLIENT;
end;
在private部分加入下列代码:
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;
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;
上面的关键代码虽然只有两行,但它实现了鼠标直接拖动窗体的目的。代码的原理是利用窗体的WM_NCHITTEST消息,这个消息是当光标移动、鼠标按下或释放时发生的,当程序检测到鼠标在窗体中按下的消息后(消息的值为htClient),将鼠标在标题栏上按下时产生的消息(值为htCaption)传递出去,这样就巧妙的欺骗程序认为是标题栏被按下,当然就可拖动窗体了。祝:身体健康,答案和分数同样重要:)
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(Handle, WM_SYSCOMMAND, $F012, 0);
end