2013-03-19 91 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)。這在動態切​​換/更改窗口樣式時可能非常有用,而不會丟失窗口狀態/句柄。