Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Application.terminate а программа продолжает работать [D2005, 2003]


Tempora ©   (2006-05-18 09:53:00) 

Есть процедура Form1.OnShow внутри которой код:
.....
if DirectoryExists(ini.ReadString('Local','loc_path','c:'))= false then begin
Application.MessageBox(
       'Локальная папка не существует.',
       'Ошибка',
       MB_OK + MB_ICONERROR);
application.Terminate;
end;
........что-то дальше
Я знаю что directoryExists точно должно вернуть false, оно и возвращает это и выводит сообщение об ошибке, но работа программы продолжается, идет выполнение команд которые указаны после этого условия.
Пожалуйста, подскажите, что это?


Tempora   (2006-05-18 12:27:00) [1]


> begin
> Application.Terminate;
> Exit;
> end;

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


ASoft   (2006-05-18 12:14:00) [2]


> идет выполнение команд которые указаны после этого условия.

Если не хотите, чтобы в теле процедуры продолжалось условие после application.Terminate поставьте :
...
begin
Application.Terminate;
Exit;
end;


но, возможно, правильнее будет [2]


Сергей М.   (2006-05-18 12:10:00) [3]


> ЮЮ ©   (18.05.06 12:05) [5]


Это если форма - основная.
А у автора неизвестно какая


ЮЮ   (2006-05-18 12:05:00) [4]

Кстати, такое работает как раз в OnShow:

 Tester.Streamer.LoadToStringList(sl, 'Marks.ini');
   if sl.Count = 0 then begin
     Application.MessageBox(
       PChar('Не найден файл параметров ' + Tester.Streamer.ZipName  + '\' +
         'Marks.ini'),
       'Ошибка инициализации', 0
     );
      Close;
   end;


Сергей М.   (2006-05-18 12:02:00) [5]


> Tempora   (18.05.06 11:59) [3]


Ну и выбрось тогда из головы эту затею.

А для новой затеи прислушайся к [2]


Tempora   (2006-05-18 11:59:00) [6]


> после Application.Terminate напиши Application.ProcessMessages

Не помогает.


ЮЮ   (2006-05-18 11:00:00) [7]

поместить этот код в dpr.
Зачем созавать форму и уже в OnShow решать, что это было ошибкой?


Сергей М.   (2006-05-18 10:03:00) [8]

после Application.Terminate напиши Application.ProcessMessages


Наверх

Титульная страница Поиск, карта сайта Написать письмо