双击时禁用表单最大化

Moo*_*ore 1 delphi resize

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

NewHeight := Round(Height / Width* NewWidth);
Run Code Online (Sandbox Code Playgroud)

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

if (AMsg.CmdType = SC_MAXIMIZE) then MessageBeep(0);
Run Code Online (Sandbox Code Playgroud)

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

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

TLa*_*ama 7

首先,删除您在WM_SYSCOMMAND消息处理程序中使用的变通方法,然后biMaximizeBorderIcons表单属性中删除选项,或者换句话说,通过BorderIcons.biMaximize在Object Inspector中设置为False,您将获得最大化按钮以及表单标题双击最大化禁用.

在运行时,您可以简单地使用:

BorderIcons := BorderIcons - [biMaximize]
Run Code Online (Sandbox Code Playgroud)


kob*_*bik 7

替代@TLama的明显答案:

SetWindowLong(Handle, GWL_STYLE, 
  GetWindowLong(Handle, GWL_STYLE) and not WS_MAXIMIZEBOX);
Run Code Online (Sandbox Code Playgroud)

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