5

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

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

编辑:添加到问题中,当我创建子表单时,它们都分别显示在任务栏中,甚至是 OpenDialogs ..

4

1 回答 1

6

这是您可以使用的一种方法:

1)正常创建您的个人表单,除了使用 TLayout,将其称为“LayoutMain”,(对齐的 alClient)作为该表单上所有控件的父级。

2)在您的“主表单”上,当您想要引入一个表单实例以使其像 MDI 界面一样运行时,创建一个 TLayout(称之为“FormContainer”或其他东西),放置为它的子项(对齐到顶部)另一个 TLayout(称为“FormHeader”),包含表单标题的各个控件、最小化/最大化/关闭按钮以及“框架”标题上您想要的任何其他内容。这称为 Composite

3) 创建子表单的一个实例(但不要显示它),然后将该实例的主 TLayout“LayoutMain”作为主表单的 TLayout“FormContainer”的父级。

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

当你想在主表单中最大化子表单时,你只需将外部 TLayout“FormContainer”对齐属性设置为 alClient,记住将其原始的 Top、Left、Width 和 Height 值存储在表单的实例中,这样你就可以按下恢复按钮时调用它们。

诚然,这是一个相当复杂的解决方案,但据我所知,这是您使用 FireMonkey 实现的唯一方法,因为它现在存在(大约更新 2)。

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

更现代的解决方案是使用对接,就像 RAD Studio IDE 本身一样。这提供了两全其美的优势,让用户可以自由选择他们想要链接到主表单中的子表单,或者在其之外单独显示(或停靠排列的任何组合)。

于 2011-11-30T18:17:35.207 回答