1

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

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

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

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

我没有设法做的是防止用户双击标题栏时最大化表单。有没有办法在德尔福做到这一点?

我希望很清楚我不想阻止用户调整表单的大小。我只想在单击最大化按钮并双击标题栏时防止调整大小。

4

2 回答 2

7

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

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

BorderIcons := BorderIcons - [biMaximize]
于 2013-03-19T13:16:49.487 回答
7

@TLama 的明显答案的替代方案:

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

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

于 2013-03-19T13:19:03.250 回答