如何最大化仅适合客户区而不适合整个父窗口的子窗口?我不希望子窗口在父窗口的主菜单或其他控件下消失。
我有这个代码
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
to SW_MAXIMIZE
然后子窗口看起来有问题。
通常,MDI 主窗体的客户空间应自动计算为没有菜单或栏的空间,前提是这些栏与窗体的边缘对齐。
当某个栏或其他控件未对齐时,您确实必须自行调整。处理WM_NCCALCSIZE
告诉Windows您的表单有偏差的客户端矩形尺寸。
或者看一下NLD额外MDI道具 https://github.com/NLDelphi/NLDExtraMDIProps我在其中捕捉到WM_SYSCOMMAND
when WParam and $FFF0 = SC_MAXIMIZE
调整 MDI 子窗口的大小。该组件提供了一些额外的属性,例如:BackgroundPicture、CleverMaximizing、ShowClientEdge 和 ShowScrollBars。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)