delphi – 与FireMonkey的MDI接口

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

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

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

解决方法

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

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

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

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

4)在前面提到的TLayout(名称为“FormHeader”)上,给它OnMouseDown和OnMouseMove事件,以提供在主表单周围拖动它的能力.

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

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

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

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

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...