在标题doubleclick上禁用表单还原

时间:2018-11-30 15:18:50

标签: delphi maximize-window

  1. 创建一个空的Delphi VCL项目
  2. 删除所有主要形式的BorderIcons
  3. 将WindowState设置为wsMaximized
  4. 运行应用程序。主窗口显示为最大化。
  5. 双击窗口标题。主窗口将恢复其大小,并且无法再次最大化它。

如何在不隐藏标题栏的情况下防止双击标题还原窗口?

3 个答案:

答案 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上可以看到这种效果。
重现步骤:

  • 运行应用程序;
  • 将鼠标悬停在标题栏上时按鼠标左键;
  • 不要释放LMB并轻轻移动鼠标-现在表格可以恢复其大小。

附录

修复了错误处理HTCAPTION以外的其他非客户端HitTest代码的错误(感谢用户 Dsm 指出这一点!)。

答案 2 :(得分:0)

我测试了一些解决方案,而可行的是:

  1. Align 属性设置为 alClient ;
  2. BorderIcons 属性中删除 biMaximize
  3. WindowState wsNormal (默认)。