Программа Delphi предотвращает правильное закрытие окон - PullRequest
1 голос
/ 04 августа 2009

У меня есть небольшая программа, которая просто читает текстовый файл дневника и отображает его в заметке - вот и все - без кнопок вы дважды щелкаете по форме, чтобы закрыть ее, если хотите, чтобы она исчезла. Когда он был запущен (даже если вы его закрыли), Windows XP доходит до «Windows завершает работу», т.е. после "Сохранения настроек пользователя" и т. д., а затем зависает. Я рассмотрел код, который выглядит немного отличающимся от других программ, которые я написал, которые были намного сложнее, но не вижу в этом ничего плохого - например, подпрограмма close содержит application.terminate, который (я думаю) должен в любом случае очистить память от ошибок. Какие-нибудь идеи, так как я, кажется, исчерпал их?

Ответы [ 4 ]

1 голос
/ 04 августа 2009

Исходя из того, что вы описали, программа должна иметь одну строку кода, добавленного программистом, которая должна вызывать Memo1.Lines.LoadFromFile. Вот что это значит, когда вы говорите: «Вот и все».

Эта программа даже не нуждается в"закрытой подпрограмме". (Я предполагаю, что вы имеете в виду событие формы OnClose.) Когда основная форма закрывается, приложение автоматически закрывается. Вот как работают все программы Delphi. Если вы ставите больше на это, вы делаете слишком много.

0 голосов
/ 05 августа 2009

Следующий код реагирует на сообщение о закрытии окна и закрывает программу.

TForm1 = class(TForm)
    ...
private
    procedure WMEndSession(var Message: TWMEndSession); message WM_ENDSESSION;
    ...
end;

procedure TForm1.WMEndSession(var Message: TWMEndSession);
begin
    close;
end;
0 голосов
/ 04 августа 2009

Приложения могут препятствовать завершению работы, если они используют процессорное время, хотя в «современных» ОС, таких как Vista и W7, должно появиться диалоговое окно, сообщающее вам об этом через некоторое время и предлагающее вам прервать приложение. Убедитесь, что ваше приложение показывает 0% CPU, когда оно находится в режиме ожидания, посмотрев в диспетчере задач и просмотрев «процессы». Bri

0 голосов
/ 04 августа 2009

Всего несколько предложений, потому что не совсем понятно, в чем ваша проблема.

Есть ли у вашего приложения проблемы с закрытием или оно зависает при выключении Windows?

  • Вы пытались установить точку останова в приложении. И дает ли это дополнительную информацию.
  • Из основной формы вы можете использовать Close, а не Application.Terminate.
...