与FireMonkey的MDI接口

Kro*_*ica 5 delphi mdi delphi-xe2 firemonkey

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

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

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

LaK*_*ven 6

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

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

2)在你的"主表单"上,当你想要一个表单实例的行为就像它作为MDI接口一样时,创建一个TLayout(称之为"FormContainer"或其他东西),放置它作为它的孩子(对齐到top)另一个TLayout(称之为"FormHeader"),包含Form Caption的单独控件,最小化/最大化/关闭按钮以及"frame"标题上你想要的任何其他内容.这称为 复合材料.

3)创建子表单的实例(但不显示它),然后将该实例的主要TLayout"LayoutMain"作为主表单的TLayout"FormContainer".

4)在前面提到的TLayout(名称为"FormHeader")上,给它OnMouseDownOnMouseMove事件提供将其拖动到主表单周围的能力.

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

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

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

更现代的解决方案是使用Docking,就像RAD Studio IDE本身一样.这提供了两个世界中最好的,使用户可以自由选择他们想要链接到主表单的子表单,或者在他们自己(或任何对接安排的组合)之外显示.