德尔福,框架与形式.什么是多文档界面?

mig*_*jek 7 delphi mdi frames tframe

昨天我开始讨论"MDI vs tabbed interface".我已经问过我是否应该继续开发基于MDI的应用程序,或者我应该将子表单嵌入到标签页中.有人指出我应该使用TFrame代替......我的问题是:为什么?

在TFrame上嵌入表单时使用TFrame的优点是什么?到目前为止我不知道,切换只需要我重写代码的某些部分......

(无论如何,我不打算在设计时使用嵌入!)

提前致谢

mgh*_*hie 11

回答评论以提供使用框架的原因:

我认为框架是GUI的构建块,现有组件的设计时间组合到更高级的组件.在Delphi 5之前,人们会使用TCustomPanel具有子控件的后代并将其注册为新组件,准备将其放到表单上.框架允许同样的事情,减少麻烦.

它们使您可以专注于开发所需的功能,仅此而已.完成后,您可以将它们嵌入到选项卡控件页,模态或无模式对话框,MDI子框架和标准框架中.您甚至可以将其中的几个添加到一个表单中 - 这可能与嵌入表单无关.关键是,为了获得最大的可重用性,通常需要分层方法,并且框架有助于实现这一点.

框架适合从行进中嵌入.表单必须适应不显示标题栏和边框,通常会覆盖CreateParams()并相应地调整窗口样式.检查器中有很多表单属性,对嵌入表单没有意义.恕我直言,应该使用最基本和最通用的实体.表单不仅仅是用于嵌入的控件容器.

OTOH我不知道嵌入一个表单不会有嵌入框架的任何缺点.

编辑:

关于类似OnCreateOnShow没有框架的事件有评论.实际上,我会考虑帧的另一个优点,因为事件处理程序没有参数,因此很多东西必须在表单中进行硬编码.

考虑每用户设置的情况:OnCreate由于没有太多可用的信息,因此总是最终使用常量或INI文件部分的表单名称,这使得重用表单或创建非常困难甚至不可能几个例子.另一方面,使用框架方法LoadSettings是明显的方法,它可以携带必要的参数.这样控制就返回到它所属的位置,返回到嵌入式框架/表单的容器.只有在可以从外部调整行为时才可以使用可重用性.

对于不是组件且需要进行生命周期管理的包含对象,例如AfterConstructionBeforeDestruction.


Ral*_*ach 5

也许你会在这个帖子中找到一些答案:gui-design-multiple-forms-vs-simulated-mdi-tabs-vs-pagecontrol