由于没有其他人在这里提供答案...
Metropolitan UI 应用程序使用TSplitForm = class(TForm)
and TDetailForm = class(TForm)
,TForm
其中Forms.TForm
. 它没有什么不同,所以唯一的问题是 Metropolitan UI 中的某些东西是否会改变事物。
查看 VCL Metropolitan UI 分屏应用程序中生成的两个表单,可以看出在使用组件的方式上没有任何异常,因此除了生成的实际代码之外没有任何影响行为。(它们是常用TPanel
的 、TGridPanel
、TGestureManager
和其他标准 VCL 组件;我看不到任何其他 VCL 应用程序无法使用的东西。)
测试表明,Close
在主窗体中像往常一样退出应用程序。因此,没有功能上的区别。快速浏览 VCL 源代码表明 Metropolitan 应用程序没有替代代码路径。
Close
and之间唯一真正的区别Application.Terminate
是Close
检查它是否是模态形式以及是否OnCloseQuery
已分配并应该调用 an。然后它检查它是否是主窗体;如果是,它只是调用Application.Terminate
. 来自 VCL.Forms,XE4 Update 1,大约。第 6812 行:
if Application.MainForm = Self then Application.Terminate
Metropolitan VCL 应用程序模板似乎只是避免了通常的关闭处理并直接终止应用程序。没有任何迹象表明我可以找到为什么需要这样做。
实际上,在更仔细地查看 Metro VCL 模板生成的代码之后,似乎调用到Application.Terminate
的正是因为它跳过了正常Form.Close
处理并立即退出,这可能是真正的 Metro 应用程序更典型的情况。(有趣的CloseButton
是,它实际上不是一个按钮,而是一个TImage
。)
只有当参与编写 IDE 生成的应用程序模板的人停下来告诉我们时,才能确定它为什么使用Application.Terminate
而不是通常使用的最终答案。Close
:-)