我有一个小程序,它简单地读取日记文本文件并将其显示在备忘录中 - 就是这样 - 如果你想让它消失,你可以双击表单来关闭它。当它运行时(即使你关闭它),Windows XP 会达到“Windows 正在关闭”,即。在“保存用户设置”等之后,它就会挂起。我检查了看起来与我编写的其他程序没有什么不同的代码,这些程序更复杂但看不出任何错误——例如,关闭例程包含 application.terminate (我认为)无论如何都应该从内存中清除任何错误。任何想法,因为我似乎已经用完了它们?
4 回答
Based on what you've described, the program should have a single line of programmer-added code, which is to call Memo1.Lines.LoadFromFile
. That's what it means when you say, "That's it."
That program doesn't even need a "close routine." (I assume you mean the form's OnClose
event.) When the main form closes, the application terminates itself automatically. That's how all Delphi programs work. If you're putting more on top of that, you're doing too much.
如果应用程序用完 CPU 时间,它们可以禁止关闭,尽管像 Vista 和 W7 这样的“现代”操作系统应该会在一段时间后显示一个对话框,告诉你这个问题并提供让你中止应用程序。通过查看任务管理器并查看“进程”,检查您的应用在空闲时是否显示 0% CPU。布里
以下代码对 Windows 关闭消息作出反应并关闭程序。
TForm1 = class(TForm)
...
private
procedure WMEndSession(var Message: TWMEndSession); message WM_ENDSESSION;
...
end;
procedure TForm1.WMEndSession(var Message: TWMEndSession);
begin
close;
end;
只是一些建议,因为不完全清楚你的问题是什么。
您的应用程序是否在关闭时出现问题,或者在 Windows 关闭期间是否挂起?
- 您是否尝试过在 application.Terminate 上设置断点?这是否提供了额外的信息。
- 在主窗体中,您可以使用 Close 而不是 Application.Terminate。