gpt4 book ai didi

delphi - 关闭地铁应用

转载 作者:行者123 更新时间:2023-12-03 18:42:07 36 4
gpt4 key购买 nike

我使用“新建文件”菜单上的VCL Metropolis UI应用程序创建了Metro应用程序。

我很惊讶他们用以下方法关闭应用程序:

procedure TSplitForm.CloseButtonClick(Sender: TObject);
{ CloseButtonClick. }
begin
Application.Terminate;
end;

rather than the usual:
procedure TSplitForm.Close1Click(Sender: TObject);
{ Close1Click. }
begin
Close;
end;


我看到Application.Terminate刚发布了PostQuitMessage(0);

关闭和终止之间有什么区别...,是否需要使用Application.Terminate关闭Metro应用?

最佳答案

由于这里没有人提供答案...

都市UI应用程序使用TSplitForm = class(TForm)TDetailForm = class(TForm),其中TFormForms.TForm。它没有什么不同,所以唯一的问题是,Metropolitan UI中的某些内容是否会更改。

在VCL Metropolitan UI拆分屏幕应用程序中查看了这两个生成的表单,发现使用的组件没有异常之处,因此,除了实际生成的代码外,没有任何影响行为的内容。 (它们是通常的TPanelTGridPanelTGestureManager和其他标准VCL组件;使用任何其他VCL应用程序都无法看到的东西。)

测试表明,主窗体中的Close照常退出应用程序。因此,没有功能上的差异。快速浏览一下VCL源代码,发现Metropolitan应用程序没有替代代码路径。

CloseApplication.Terminate之间唯一真正的区别是Close检查是否为模态形式,以及是否已分配且应调用OnCloseQuery。然后检查它是否是主要形式。如果是,它仅调用Application.Terminate。从VCL.Forms,XE4更新1,大约。 #6812行:

if Application.MainForm = Self then Application.Terminate


Metropolitan VCL应用程序模板似乎只是避免了通常的关闭处理并直接终止该应用程序。我找不到可以说明为什么需要这样做的任何地方。

实际上,在更仔细地检查了Metro VCL模板生成的代码之后,看起来对 Application.Terminate的调用恰好是因为它跳过了正常的 Form.Close处理并立即退出,这在实际的Metro应用程序中可能更为典型。 (有趣的是, CloseButton实际上不是按钮,而是 TImage。)

为什么使用 Application.Terminate而不是通常的 Close的明确答案只有在参与编写IDE生成的应用程序模板的人员停下来并告诉我们时才能确定。 :-)

关于delphi - 关闭地铁应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17976507/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com