是否可以使用FireMonkey以传统意义上的许多文档表格/框架和一个主表格创建MDI应用程序?
我特别感兴趣,因为表单上没有MDI控件了。是否用其他东西代替了它?
编辑:添加到问题,当我创建子窗体时,它们都分别显示在任务栏中,甚至是OpenDialogs。
最佳答案
您可以使用以下一种方法:
1)正常创建您的单个表单,除了使用TLayout之外,将其称为“ LayoutMain”(对齐的alClient)作为该表单上所有控件的父级。
2)在“主表单”上,当您想让表单实例作为MDI接口发挥作用时,请创建一个TLayout(称为“ FormContainer”或类似内容),并作为其子对象放置(对齐顶部)是另一个TLayout(称为“ FormHeader”),其中包含“表单标题”的各个控件,“最小化/最大化/关闭”按钮以及“框架”标题上您想要的其他任何内容。这称为复合。
3)创建子窗体的实例(但不显示),然后将该实例的主TLayout“ LayoutMain”作为主窗体的TLayout“ FormContainer”的父对象。
4)在前面提到的TLayout(名称为“ FormHeader”)上,赋予它OnMouseDown
和OnMouseMove
事件以提供将其拖到主窗体上的功能。
当您想最大化主表单中的子表单时,只需将外部TLayout“ FormContainer” align属性设置为alClient,记住要在表单实例中存储其原始的Top,Left,Width和Height值,这样您就可以按下“恢复”按钮时,请重新调用它们。
没错,这是一个相当复杂的解决方案,但据我所知,这是您要实现的FireMonkey的唯一途径(大约在更新2中)。
我不希望Embarcadero作为FireMonkey的一部分提供任何形式的MDI仿真,因为MDI被认为是一种老式的方法。
像RAD Studio IDE本身一样,更现代的解决方案是使用Docking。这提供了两全其美的选择,使用户可以自由选择要链接到主表单的子表单,也可以自行显示(或对接布置的任何组合)。