2009-08-04 3 views
1

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

+3

Если вы запустите свою программу и закроете ее, она все равно появится в диспетчере задач Windows? – LachlanG

+0

Да, это отображается в диспетчере задач. Я установил его, поэтому он отображается в лотке не на панели задач. Первоначально я просто установил закрытую рутину как «близко», так как она играла, я вложил в то, что, по моему мнению, это severla-строки избыточного кода, например. application.terminate. Дело в том, что программа (я протестировал все запущенные биты и фрагменты, и похоже, что это причина) останавливает закрытие окон, даже если вы сначала закрываете программу. – 2009-08-06 15:27:05

ответ

0

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

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

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

Я думаю, что OP означало, что программа не позволяет Windows отключиться. –

+0

Программа закрывается, но окна зависают, закрываете ли вы ее. – 2009-08-06 15:32:21

0

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

1

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

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

0

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

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

procedure TForm1.WMEndSession(var Message: TWMEndSession); 
begin 
    close; 
end; 
+1

Что не так с обработчиком для этого сообщения Windows в * TApplication.WndProc() *? – mghie

+0

Это, наверное, то же самое. –