与FireMonkey的MDI接口

时间:2011-11-17 18:01:17

标签: delphi mdi delphi-xe2 firemonkey

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

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

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

1 个答案:

答案 0 :(得分:6)

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

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

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

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本身一样。这提供了两个世界中最好的,让用户可以自由选择他们想要链接到主表单的子表单,或者自己在表单之外显示(或任何对接安排的组合)。