在某些情况下,我应该用
终止申请Application.Terminate;
在这种情况下,我想在某些destructor
的{{1}}内向用户显示一些消息。
我尝试使用TFrame
,MessageBox
,MessageBoxIndirect
功能但没有成功。消息框不会出现在屏幕上,应用程序将关闭。
在ShowMessage
终止时,有没有办法向用户显示某些消息?
顺便说一句,Application
已使用。
答案 0 :(得分:5)
类似评论表明用例如MessageBox
,MessageBoxIndirect
或ShowMessage
,您的流程仍然需要运行。
Delphi for .NET会有一个适合OnShutdown
的事件,但是当没有使用条件CLR
进行编译时,它就不存在了。
然而,可以使用退出程序,例如TApplication
与DoneApplication
一起使用。在调用System.Halt
之前,在进程仍然存在的位置调用此过程。通过在AddExitProc(Proc: TProcedure)
中调用System.SysUtils
来添加它。代码评论如下:
{AddExitProc将给定的过程添加到运行时库的退出 程序清单。当应用程序终止时,它的退出程序 以与定义相反的顺序执行,即最后一个程序 传递给AddExitProc是第一个被执行的 终止。 }
我个人决定使用此功能,尽管warning from the documentation,TApplication
本身仍然在东京使用它来调用DoneApplication
。摘自文档:
[...] AddExitProc与ULX软件包支持不兼容 仅提供向后兼容性。不要使用AddExitProc 新申请。[...]
VCL项目的小代码示例将显示有关应用程序终止的消息:
program Project1;
uses
Vcl.Forms,
Vcl.Dialogs,
System.SysUtils,
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
procedure AppTerminated;
begin
MessageDlg('Message', mtInformation, [mbOk], 0);
end;
begin
AddExitProc(AppTerminated);
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
答案 1 :(得分:4)
调用Application.Terminate
后,任何显示对话失败的尝试都会失败。你不能吃蛋糕吃。您无法终止您的流程,并将其保持活动状态以显示对话框。
因此,这个难题的明显解决方案是: