FormStyle = fsMDIForm 主窗体上的框架
Frame on main form with FormStyle = fsMDIForm
有没有办法在具有 Align = alClient
框架的主窗体上显示 MDI 子窗体 (FormStyle = fsMDIChild
)?
在主窗体上创建框架:
Frame := TfrCalendar.Create(Self);
Frame.Parent := Self;
正在主窗体上创建 MDI 子窗体:
if Assigned(FMDIRef)
then
FMDIRef.BringToFront
else begin
FMDIRef := TFReference.Create(Application);
FMDIRef.Show;
end;
此后,子窗体不可见。如果您不创建框架,则表单是可见的。如果先显示子窗体,然后在主窗体上创建框架,那么子窗体又变得不可见了。
这里的问题是您的框架正在与 MDI 客户端 window 竞争 space。 MDI 客户端 window 是 window,它是 MDI 子 windows.
的父级
在您的方案中,框架占用了主 window 内所有剩余的客户区,因此没有 space 用于 MDI 客户端 window。
您的尝试是不可能的。 MDI 客户端 window 必须去某个地方,你必须给它留一些空间。
根据您的实际目标,可以使用不同的解决方案:
- 如果要使框架始终可见,则使用
alTop
。它下面剩余的 space 将可供 MDI 客户端使用 window。
- 如果您希望在 MDI 客户端 window 上显示图像作为背景,请参考我的回答:
有没有办法在具有 Align = alClient
框架的主窗体上显示 MDI 子窗体 (FormStyle = fsMDIChild
)?
在主窗体上创建框架:
Frame := TfrCalendar.Create(Self);
Frame.Parent := Self;
正在主窗体上创建 MDI 子窗体:
if Assigned(FMDIRef)
then
FMDIRef.BringToFront
else begin
FMDIRef := TFReference.Create(Application);
FMDIRef.Show;
end;
此后,子窗体不可见。如果您不创建框架,则表单是可见的。如果先显示子窗体,然后在主窗体上创建框架,那么子窗体又变得不可见了。
这里的问题是您的框架正在与 MDI 客户端 window 竞争 space。 MDI 客户端 window 是 window,它是 MDI 子 windows.
的父级在您的方案中,框架占用了主 window 内所有剩余的客户区,因此没有 space 用于 MDI 客户端 window。
您的尝试是不可能的。 MDI 客户端 window 必须去某个地方,你必须给它留一些空间。
根据您的实际目标,可以使用不同的解决方案:
- 如果要使框架始终可见,则使用
alTop
。它下面剩余的 space 将可供 MDI 客户端使用 window。 - 如果您希望在 MDI 客户端 window 上显示图像作为背景,请参考我的回答: