有一个很好的组件可以最大化客户区域中的子窗口(必须按住 SHIFT 键)- NLDExtraMDIProps。
或者可以使用此代码:
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;
但最大化并不是真正的最大化。子窗口仅与客户区对齐。当父窗口调整大小时,它必须自动调整大小并适应客户区,最大化/恢复系统按钮必须改变等。
我尝试完成下面描述的效果。
正如您在图片上看到的那样,子窗口已最大化,并且
他们不占用整个父窗口(仅客户区)。
无法将它们移动到标题/标题栏上,因为它们已最大化。
他们有恢复按钮,不再是最大化按钮。
它们与客户区对齐(调整父窗口的大小会导致调整客户区的子窗口的大小)。
我的问题中的代码和组件不像图片上的子窗口。
我们可以让一个窗口真正最大化(不仅仅是对齐)吗?
未最大化(不好;我的问题中的组件和代码像这些图片一样最大化):
最大化(我需要的):