Delphi: развернутая дочерняя форма в приложении MDI - PullRequest
3 голосов
/ 24 февраля 2012

Как я могу развернуть дочернее окно, которое подходит только для клиентской области, но не для всего родительского окна?Я не хочу, чтобы дочернее окно исчезало из главного меню или других элементов управления родительского окна.

У меня есть этот код

procedure WMSIZE(var Msg: TMessage); message WM_SIZE;

procedure TForm2.WMSIZE(var Msg: TMessage);
begin
  inherited;
  if Msg.WParam = SIZE_MAXIMIZED then
  begin
    ShowWindow(Handle, SW_RESTORE);
    Left := 0;
    Top := 0;
    Width := Form1.ClientWidth - 4; // The BORDER
    Height := Form1.ClientHeight - 4;
  end;
end;

Но этого недостаточноОкно на самом деле не развернуто.Если изменить SW_RESTORE на SW_MAXIMIZE, то дочернее окно выглядит глючно.

1 Ответ

2 голосов
/ 24 февраля 2012

Обычно клиентское пространство главной формы MDI должно автоматически рассчитываться для пространства без меню или полос, при условии, что эти полосы выровнены по краю формы.

Если полоса или другие элементы управления не выровнены, то вам действительно нужно настроить себя. Дескриптор WM_NCCALCSIZE сообщает окнам, что ваша форма имеет отклоняющиеся размеры клиента.

Или взгляните на NLDExtraMDIProps , в котором я ловлю WM_SYSCOMMAND при WParam and $FFF0 = SC_MAXIMIZE, чтобы настроить размер дочернего окна MDI. Компонент предоставляет несколько дополнительных свойств, таких как: BackgroundPicture, CleverMaximizing, ShowClientEdge и ShowScrollBars.

...