双击时禁用表单最大化

时间:2013-03-19 13:05:56

标签: delphi resize

我希望在用户调整表单大小时按比例调整表单大小。我在事件OnCanResize中使用以下代码完成了此操作:

NewHeight := Round(Height / Width* NewWidth);

要阻止用户通过单击最大化按钮来最大化表单,我设法禁用它,使用以下代码处理消息WMSysCommand

if (AMsg.CmdType = SC_MAXIMIZE) then MessageBeep(0);

我没有设法做的是当用户双击标题栏时阻止最大化表单。在Delphi中有什么办法吗?

我希望很明显,我不想阻止用户调整表单大小。我只是想在单击最大化按钮并双击标题栏时阻止调整大小。

2 个答案:

答案 0 :(得分:7)

首先,删除您在WM_SYSCOMMAND邮件处理程序中使用的变通方法,然后从表单的biMaximize属性中删除BorderIcons选项,或者换句话说,设置{在对象检查器中{1}}为False,您将获得最大化按钮以及表单标题双击最大化禁用。

在运行时,您只需使用:

BorderIcons.biMaximize

答案 1 :(得分:7)

替代@ TLama明显的answer

SetWindowLong(Handle, GWL_STYLE, 
  GetWindowLong(Handle, GWL_STYLE) and not WS_MAXIMIZEBOX);

与设置BorderIcons相反,这不会强制重新创建窗口句柄(不会调用RecreateWnd)。在动态切换/更改窗口样式而不丢失窗口状态/句柄时,这可能很有用。