Delphi - 在主窗体上创建停止应用程序

时间:2013-07-30 11:22:03

标签: delphi delphi-xe

情况如下:在应用程序主窗体上创建事件某些条件不受尊重,因此应用程序需要关闭。

是的,这是一个糟糕的设计,但应该如何关闭应用程序?使用Application.MainForm.Close生成AV。 Application.Terminate不是一个很好的选择。其他想法?

3 个答案:

答案 0 :(得分:12)

Application.Terminate效果很好。但是,请记住,它是延迟终止,它所做的只是将WM_QUIT消息发布到调用线程的消息队列,因此应用程序实际上不会终止{{1}调用它来开始处理主线程的消息队列。因此,在应用程序实际终止之前,您可能会在屏幕上看到MainForm闪烁。如果要避免这种情况,可以将Application.Run()属性设置为false,例如:

Application.ShowMainForm

然而,正如其他人所说,更好的设计是在项目的DPR文件中进行检查,甚至根本不创建MainForm,例如:

procedure TMainForm.FormCreate(Sender: TObject);
begin
  if (some condition) then
  begin
    Application.ShowMainForm := False;
    Application.Terminate;
  end;
end;

答案 1 :(得分:4)

如果你想坚持你糟糕的设计,那么这是一个糟糕的答案:

try
  Application.Terminate
except
end;

答案 2 :(得分:2)

Application.Terminate

非常好,除非您在创建表单之前(在dpr中)需要优化设计以检查这些条件。