Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
ВнизСтранности Application.Terminate (или может мои? :) Найти похожие ветки
← →
Pavor (2003-05-21 07:42) [0]Приветствую, профессионалы.
Столкнулся с таким вот странным явлением. Для начала кусок начала кода программы.
procedure Form1.OnCreate (Sender: TObject);
begin
if FindFirst("Путь1", Rez)<>0 then if FindFirst("Путь1", Rez)<>0 then
FindClose(Rez);
MessageDlg("Невозможно продолжать работу" {ну тут еще параметры});
Application.Terminate;
end;
{...типа "вычисления"}
ShowMessage("Промежуточный результат 1");
{...}
ShowMessage("Промежуточный результат 2");
{...}
ShowMessage("Промежуточный результат 3");
Теперь собственно явление. Если выполняются оба условия, появляется окно "Невозможно продолжать...", с этим все нормально. После нажатия на [OK] программа должна вырубиться. Теоритически. В конце-концов она так и делает, но перед этим проскакивают (и тут же закрываются сами)все окна ShowMessage, которые стоят послеApplication.Terminate;
. Вот этого никак понять не могу. Если вместоApplication.Terminate;
поставитьExit;
- срабатывает нормально. Но как все-таки закрывать программу?
Это самое ее начало, больше почти ничего написать не успел :) На форме еще компонент ICS есть. SMTP. Но его я в вышеприведенном коде никаким образом не трогаю.
Помогите, плиз...
← →
Pavor (2003-05-21 07:44) [1]После
then
упустилbegin
, sorry.
← →
Романов Р.В. (2003-05-21 07:59) [2]
> Странности Application.Terminate
:)
← →
Pavor (2003-05-21 08:11) [3]Я понимаю, что смешно :)
Но вопрос-то остается!!!
← →
KoluChi (2003-05-21 09:03) [4]Application.Terminate лучше не пользоваться, а заменить на Application.MainForm.Close()
и еще добавить Exit;
← →
KSergey (2003-05-21 09:25) [5]На сколько я понимаю, Application.Terminate не рубит буквально тут же приложение, а просто посылает себе сообщение о том, что не плохо бы выключиться. А потому весь последующий код продолнает спокойно работать.
← →
mrcat (2003-05-21 09:33) [6]>Если выполняются оба условия, появляется окно "Невозможно продолжать...", с этим все нормально. После нажатия на [OK] программа должна вырубиться
Откуда известно, что выполняются оба условия?
if (FindFirst("Путь1", Rez) <> 0) and
(FindFirst("Путь1", Rez)<> 0) then
begin
FindClose(Rez);
MessageDlg("Невозможно продолжать работу", ...);
Application.Terminate;
end;
{...типа "вычисления"}
ShowMessage("Промежуточный результат 1");
{...}
ShowMessage("Промежуточный результат 2");
{...}
ShowMessage("Промежуточный результат 3");
end;
Работает.
← →
Lord Warlock (2003-05-21 09:34) [7]
procedure Form1.OnCreate (Sender: TObject);
begin
if FindFirst("Путь1", Rez)<>0 then if FindFirst("Путь1", Rez)<>0 then
FindClose(Rez);
MessageDlg("Невозможно продолжать работу" {ну тут еще параметры});
Application.Terminate;
end;
if not Application.Terminated then
begin
{...типа "вычисления"}
ShowMessage("Промежуточный результат 1");
{...}
ShowMessage("Промежуточный результат 2");
{...}
ShowMessage("Промежуточный результат 3");
...
end;
← →
Lord Warlock (2003-05-21 09:40) [8]Или очень просто - процедура Halt;
← →
Юрий Зотов (2003-05-21 09:56) [9]А еще надо бы убрать утечку памяти. Каждый вызов FindFirst требует своего FindClose.
← →
Pavor (2003-05-21 10:53) [10]Всем большое спасибо.
2 KSergey: да, кажется так оно и есть..
2 mrcat: я такое пробовал. результат аналогичный. но проверю. (про условия известно точно: я путь1 и путь2 убирал -переименовывал)
2 Lord Warlock:Halt
ведь не рекомендуют использовать? Или я ошибаюсь?
← →
Pavor (2003-05-22 09:07) [11]Это снова я.
Если кому-то интересно, то результаты моих изысканий следующие.
Мгновенно завершить программу позволяет толькоHalt
,
как и следовало ожидать. На нем пока и остановился, смущает то, что в хелпе о нем написано, что вызывает "abnormal program termination".
Переделка 2-х условных операторов в один с использованиемand
, а также использование в последующей части программыif not Application.Terminated then...
видимых изменений не дает (т.е. проблема остается).
Application.MainForm.Close;
почему-то вообще вызывает исключительную ситуацию...
Вот такие дела. Еще раз всем спасибо. Желаю всем корректного завершения программ :)
← →
Hint (2003-05-22 10:43) [12]Halt лучше не пользоваться: Initiates abnormal termination of a program
Может лучше ExitProcess: This function provides a clean process shutdown.
← →
Holy (2003-05-22 10:44) [13]Не проще ли перенести эту проверку в dpr перед Application.CreateForm(); или еще раньше. Тогда если нельзя запускаться, то формы не будут созданы и ты спокойно завершишь работу.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.014 c