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主窗体的客户端空间应自动计算为没有菜单或条的空间,前提是这些条与窗体的边缘对齐
当一个条或其他控件没有对齐时,您确实需要调整自己。HandleWM\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!!!你的回答很有价值。对不起,我不知道换档钥匙的事。另一个问题出现了,我将分别提问。