Question

Comment puis-je maximiser une fenêtre enfant qui s'adapte uniquement à la zone client mais pas à une fenêtre parent entière ?Je ne veux pas que la fenêtre enfant disparaisse sous un menu principal ou d'autres contrôles de la fenêtre parent.

j'ai ce code

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;

Mais ce n'est pas suffisant.La fenêtre n'est en fait pas maximisée.Si changer SW_RESTORE à SW_MAXIMIZE alors la fenêtre enfant semble boguée.

Était-ce utile?

La solution

Normalement, l'espace client du formulaire principal MDI doit être calculé automatiquement sur l'espace sans menu ni barres, à condition que ces barres soient alignées sur un bord du formulaire.

Lorsqu’une barre ou d’autres contrôles ne sont pas alignés, alors il faut effectivement s’ajuster soi-même.Poignée WM_NCCALCSIZE pour indiquer à Windows que votre formulaire a des dimensions client différentes.

Ou jetez un oeil à NLDExtraMDIProps dans lequel j'attrape WM_SYSCOMMAND quand WParam and $FFF0 = SC_MAXIMIZE pour ajuster la taille d'une fenêtre enfant MDI.Le composant fournit quelques propriétés supplémentaires telles que :BackgroundPicture, CleverMaximizing, ShowClientEdge et ShowScrollBars.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top