Delphi:MDI应用程序中的最大化子窗体

Delphi:MDI应用程序中的最大化子窗体,delphi,border,mdi,maximize,Delphi,Border,Mdi,Maximize,如何最大化只适合客户端区域而不适合整个父窗口的子窗口?我不希望子窗口消失在主菜单或父窗口的其他控件下 我有这个密码 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_RE

如何最大化只适合客户端区域而不适合整个父窗口的子窗口?我不希望子窗口消失在主菜单或父窗口的其他控件下

我有这个密码

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\u RESTORE
更改为
SW\u MAXIMIZE
,则子窗口看起来有问题。

通常,MDI主窗体的客户端空间应自动计算为没有菜单或条的空间,前提是这些条与窗体的边缘对齐

当一个条或其他控件没有对齐时,您确实需要调整自己。Handle
WM\u NCCALCSIZE
告诉windows您的表单有不同的客户端rect维度


或者看看我在
WParam和$FFF0=SC\u MAXIMIZE
时捕捉到的
WM\u SYSCOMMAND
以调整MDI子窗口的大小。该组件提供了一些额外的属性,如:BackgroundPicture、CleverMaximize、ShowClientEdge和ShowScrollBars。

如果单独问这些问题,您可能会得到更好的答案。您可能需要处理
WM\u GETMINMAXINFO
。看一看。HTH给我的感觉是,当您最大化子窗口时,它会最大化到屏幕而不是mdi父窗口。如果这是真的,那么听起来您只是没有为子窗口和父窗口正确设置FormStyle属性不,只需按住SHIFT键:)NGLN,非常感谢您的回答!我试过你的组件,真的很有用!滚动条和边框是隐藏的。但CleverMaximize对我不起作用,子窗口仍然占用整个窗口,而不是客户端区域。我有两个左对齐和顶部对齐的条。delphixe2。你能帮我一下吗?请看我编辑的问题。我怀疑你得出了错误的结论。使用MDI子级左上角的控件重试测试,该控件将显示在面板旁边和菜单栏下方。客户端窗口的大小由
TCustomForm.AlignControls
控制;我不明白为什么XE2会有变化。谢谢NGLN!!!你的回答很有价值。对不起,我不知道换档钥匙的事。另一个问题出现了,我将分别提问。