2013-03-19 89 views
1

我想在用户调整大小时按比例调整窗体大小。我在事件OnCanResize用下面的代码这样做:禁用窗体最大化双击

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

为了防止用户最大化的形式通过点击最大化按钮,我设法禁用它用下面的代码处理的消息WMSysCommand

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

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

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

回答

7

为先,删除你在WM_SYSCOMMAND消息处理程序使用,然后只需在Object Inspector中BorderIcons.biMaximize设置为False从窗体的BorderIcons财产或者换句话说,除去biMaximize选项的解决方法,你会获得最大化按钮以及表单标题双击最大化禁用。

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

BorderIcons := BorderIcons - [biMaximize] 
6

的替代@ TLama的明显answer

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

与之相对设置BorderIcons,这不会强制重新创造窗口句柄(不会拨打电话RecreateWnd)。这在动态切​​换/更改窗口样式时可能非常有用,而不会丢失窗口状态/句柄。