我希望在用户调整表单大小时按比例调整表单大小。我在事件OnCanResize
中使用以下代码完成了此操作:
NewHeight := Round(Height / Width* NewWidth);
要阻止用户通过单击最大化按钮来最大化表单,我设法禁用它,使用以下代码处理消息WMSysCommand
:
if (AMsg.CmdType = SC_MAXIMIZE) then MessageBeep(0);
我没有设法做的是当用户双击标题栏时阻止最大化表单。在Delphi中有什么办法吗?
我希望很明显,我不想阻止用户调整表单大小。我只是想在单击最大化按钮并双击标题栏时阻止调整大小。
答案 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
)。在动态切换/更改窗口样式而不丢失窗口状态/句柄时,这可能很有用。