有人指出我应该使用TFrames ……我的问题是:为什么?
在TFrame上嵌入表单时使用TFrame的优点是什么?到目前为止我还不知道,切换只需要我重写代码的某些部分……
(无论如何,我不打算在设计时使用嵌入!)
提前致谢
解决方法
我认为框架是GUI的构建块,现有组件的设计时间组合到更高级的组件.在Delphi 5之前,人们会使用带有子控件的TCustomPanel后代,并将其注册为新组件,准备将其放到表单上.框架允许同样的事情,减少麻烦.
它们使您可以专注于开发您需要的功能,仅此而已.如果做得好,您可以将它们嵌入到选项卡控件页,模态或无模式对话框,MDI子框架和标准框架中.您甚至可以将其中的几个添加到一个表单中 – 这可能与嵌入表单无关.关键是,为了获得最大的可重用性,通常需要采用分层方法,并且框架有助于实现这一点.
框架适合从行进中嵌入.表单必须适应不显示标题栏和边框,通常会覆盖CreateParams()并相应地调整窗口样式.检查器中有很多表单属性,对嵌入表单没有意义.恕我直言,应该使用最基本和最通用的实体.表单不仅仅是用于嵌入的控件容器.
OTOH我不知道嵌入一个表单不会有嵌入框架的任何缺点.
编辑:
关于框架没有的OnCreate或OnShow等事件有评论.实际上,我认为帧的另一个优点是,因为事件处理程序没有参数,所以很多东西都必须在表单中进行硬编码.
考虑每用户设置的情况:在OnCreate中没有太多可用的信息,因此总是最终使用常量或INI文件部分的表单名称,这使得重用表单或者很难甚至不可能创建它的几个实例.另一方面,使用框架LoadSettings是一种显而易见的方法,它可以携带必要的参数.这样控制就返回到它所属的位置,返回到嵌入式框架/表单的容器.只有在可以从外部调整行为时才可以使用可重用性.
对于不是组件且需要进行生命周期管理的包含对象,例如AfterConstruction和BeforeDestruction.