如何在不隐藏标题栏的情况下防止双击标题还原窗口?
答案 0 :(得分:3)
您可以拦截还原,也可以拦截移动系统命令,以通过拖动标题来防止还原。
type
TForm1 = class(TForm)
protected
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
...
procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
case Message.CmdType and $FFF0 of
SC_MOVE, SC_RESTORE: Exit;
end;
inherited;
end;
答案 1 :(得分:1)
答案已编辑!
如果我答对了,您可能希望禁止在标题栏上双击,以防止将表格恢复到其原始大小。您可以通过拦截WM_NCLBUTTONDBLCLK来做到这一点。
在下面的示例中,我重写了WndProc
主要形式的方法并钩住了前面提到的消息。
procedure TForm1.WndProc(var Message: TMessage);
begin
case Message.Msg of
WM_NCLBUTTONDBLCLK:
begin
case TWMNCHitMessage(Message).HitTest of
HTCAPTION:
Exit
else // Another HitTest-codes are handled here
Inherited WndProc(Message);
end;
end
else
Inherited WndProc(Message);
end;
end;
重要提示
尽管现在您无法通过双击恢复 最大化 表单,但仍可以通过在标题栏捕获鼠标时移动它来恢复它。至少在Windows 7上可以看到这种效果。
重现步骤:
附录
修复了错误处理HTCAPTION
以外的其他非客户端HitTest代码的错误(感谢用户 Dsm 指出这一点!)。
答案 2 :(得分:0)
我测试了一些解决方案,而可行的是: