Решение, предложенное Кеном Уайтом, имеет несколько проблем:
- Кнопка «Развернуть» остается активной, можно использовать маркеры изменения размера в развернутом окне
- Невозможно восстановить окно до прежнего размера.
Поэтому я предлагаю следующее:
// add to form object
procedure WMGetMinMaxInfo(var mmInfo : TWMGETMINMAXINFO); message WM_GETMINMAXINFO;
// implementation
procedure TfrmMain.WMGetMinMaxInfo(var mmInfo: TWMGETMINMAXINFO);
var
R: TRect;
begin
with mmInfo.MinMaxInfo^ do
begin
SystemParametersInfo(SPI_GETWORKAREA, 0, @R, 0);
ptMaxPosition.X := R.Left;
ptMaxPosition.Y := R.Top;
ptMaxSize.X := R.Right - R.Left;
ptMaxSize.Y := R.Bottom - R.Top-1;
end;
end;
Не идеально, так как я должен (по некоторым причинам) отрегулировать maxHeight на -1, чтобы обработчик по умолчанию не восстанавливал себя и не перемещал окно в -8, -8, ... Но это работает для меня.