FormStyle = fsMDIForm的主窗体上的框架

LuF*_*ang 1 delphi mdi frame delphi-10.2-tokyo

有没有办法FormStyle = fsMDIChild在主窗体上显示具有框架的MDI子窗体()Align = alClient
在主窗体上创建框架:

Frame := TfrCalendar.Create(Self);
Frame.Parent := Self;   
Run Code Online (Sandbox Code Playgroud)

在主窗体上创建MDI子窗体:

if Assigned(FMDIRef)
then
  FMDIRef.BringToFront
else begin
  FMDIRef := TFReference.Create(Application);
  FMDIRef.Show;
end;
Run Code Online (Sandbox Code Playgroud)

在此之后,子表单不可见.如果您不创建框架,则表单可见.如果您首先显示子窗体,然后在主窗体上创建一个框架,则子窗体将再次变为不可见.

Dav*_*nan 5

这里的问题是您的框架正在与MDI客户端窗口竞争空间.MDI客户端窗口是MDI子窗口的父窗口.

在您的方案中,框架消耗主窗口内的所有剩余客户区域,因此不为MDI客户端窗口留出空间.

你在尝试什么是不可能的.MDI客户端窗口必须到达某个地方,您必须留出一些空间.

根据您的实际目标,提供不同的解决方案:

  • 如果框架始终可见,则使用alTop.其下方的剩余空间将可用于MDI客户端窗口.
  • 如果您希望在MDI客户端窗口上显示图像作为背景,请参阅我的答案:https://stackoverflow.com/a/15137740/505088

  • 一旦MDI儿童出现,背景将落后,既不使用也不装饰.您需要重新审视该要求. (4认同)