2011-11-17 107 views
5

是否可以使用FireMonkey以传统意义上的许多文档形式/框架和一个主表单来创建MDI应用程序?使用FireMonkey的MDI接口

我特别感兴趣,因为表单上没有MDI控件了。它是否被替换为不同的东西?

编辑:添加到这个问题,当我创建子窗体,他们都表现出分别在任务栏上,甚至OpenDialogs ..

+0

我想最终会修正XE2更新版本。 – Kromster

回答

5

这里有一个方法,你可以使用:

1)创建您的个性化形式正常,除了使用TLayout之外,将其称为“LayoutMain”(对齐alClient)作为该窗体上所有控件的父项。

2)在你的“主表单”上,当你想把一个表单实例作为一个MDI接口使用时,创建一个TLayout(称之为“FormContainer”或其他),把它作为(与顶部对齐)另一个TLayout(称为“FormHeader”),其中包含表单标题,最小化/最大化/关闭按钮以及您希望在“框架”标题上的其他任何控件。 这叫做复合

3)创建子窗体实例(,但不显示它),然后将该实例的主TLayout“LayoutMain”父项添加到主窗体的TLayout“FormContainer”中。

4)在前面提到的TLayout中(名称为“FormHeader”),给它提供OnMouseDownOnMouseMove事件以提供将它拖到主窗体上的能力。

当您想要最大化主窗体内的子窗体时,只需将外部TLayout“FormContainer”对齐属性设置为alClient,并记住将其原始顶部,左侧,宽度和高度值存储在窗体的实例,以便在按下恢复按钮时可以调出它们。

的确,这是一个相当复杂的解决方案,但就我所知,这是您实现FireMonkey所需的唯一方法,因为它今天存在(大约更新2)。

我不希望Embarcadero提供任何形式的MDI仿真作为FireMonkey“开箱即用”的一部分,因为MDI被认为是一种老式的方法。

更现代的解决方案是使用Docking,就像RAD Studio IDE本身一样。这提供了两个世界中最好的,让用户可以自由选择他们想要链接到主表格中的子表单,或者自行显示它们(或任何停靠的布置组合)。

+0

感谢您的好回答,它一定会有所帮助。在我的情况下,我正在寻找一个更规范的解决方案,这将允许我有多个独特的TFMXHandles(我将转换为平台HWNDs以便在它们上初始化OpenGL上下文)的MDI窗口。我现有的解决方案是创建几种形式,但很遗憾,他们不能很好地协作 - Z从任务栏排序和聚焦是错误的。 – Kromster