2013-03-19 3 views
1

Я хочу, чтобы размер формы изменялся пропорционально, когда пользователь меняет размер. Я делал это в случае OnCanResize со следующим кодом:Отключить форму максимизировать при двойном щелчке

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

Чтобы пользователь максимизирует форму, нажав на кнопку разворачивания мне удалось отключить его обработки сообщения WMSysCommand со следующим кодом:

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

Что мне не удалось сделать, это не допустить максимизации формы, когда пользователь дважды щелкает по строке заголовка. Есть ли способ сделать это в Delphi?

Надеюсь, что я не хочу, чтобы пользователь не изменял размер формы. Я просто хочу предотвратить изменение размера при нажатии кнопки максимизации и двойного щелчка по строке заголовка.

ответ

7

Как первый, удалите обходной путь вы использовали в обработчике WM_SYSCOMMAND сообщения, а затем просто удалить biMaximize вариант из BorderIcons свойства вашей формы или, других слов, установив BorderIcons.biMaximize Лжи в инспекторе объектов, и вы будете нажмите кнопку максимизации, а также нажмите кнопку двойного щелчка мышью.

Во время выполнения вы могли бы просто использовать:

BorderIcons := BorderIcons - [biMaximize] 
6

альтернатива @ TLama очевидно answer:

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

В отличие от установки BorderIcons, это не заставит воссоздание ручка окна (звонок не будет отправлен в RecreateWnd). Это может быть полезно при динамическом переключении/изменении стиля окна без потери состояния окна/дескриптора.