我希望在用户调整大小时按比例调整表单大小.我在事件中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中有什么办法吗?
我希望很明显,我不想阻止用户调整表单大小.我只是想在单击最大化按钮并双击标题栏时阻止调整大小.
首先,删除您在WM_SYSCOMMAND消息处理程序中使用的变通方法,然后biMaximize从BorderIcons表单属性中删除选项,或者换句话说,通过BorderIcons.biMaximize在Object Inspector中设置为False,您将获得最大化按钮以及表单标题双击最大化禁用.
在运行时,您可以简单地使用:
BorderIcons := BorderIcons - [biMaximize]
Run Code Online (Sandbox Code Playgroud)
替代@TLama的明显答案:
SetWindowLong(Handle, GWL_STYLE,
GetWindowLong(Handle, GWL_STYLE) and not WS_MAXIMIZEBOX);
Run Code Online (Sandbox Code Playgroud)
与设置相反BorderIcons,这不会强制重新创建窗口句柄(不会进行调用RecreateWnd).在动态切换/更改窗口样式而不丢失窗口状态/句柄时,这可能很有用.
| 归档时间: |
|
| 查看次数: |
2711 次 |
| 最近记录: |