Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2011, 22:09   #11
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
В его коде Exit не выполняется. Следовательно, его замена на Halt/Terminate ничего не даст.
Я убрал On EFilerError. С Halt -ом вроде нормально идет.А почему лучше использовать этот код вместо Halt в моем коде без On EFilerError ?

Ну On EFilerError - с этим понятно, а почему Halt хуже чем предложенный код? Вроде даже проще...
даешь высокое напряжение

Последний раз редактировалось Vova777; 02.06.2011 в 22:13.
Vova777 вне форума Ответить с цитированием
Старый 02.06.2011, 22:16   #12
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

В пустом приложении - разницы никакой.

В реальном - разница есть.

Потому что у вас могут быть возникать исключение не только в FormCreate, но и в других местах. Вы каждый чих будете в try-except заворачивать? Нет. Поэтому нужно обрабатывать все места в одном - для чего и предназначен механизм обработки исключений.

Кроме того, Halt - это слишком жёстко, рубит программу в точке вызова, не позволяя выполниться коду очистки, который выполнялся бы при обычном вызове. Опять же, это не имеет значение в простой программе, где ничего такого просто нет, но в реальных приложениях это может иметь значение.

А Application.Terminate - это, наоборот, слишком мягко. Его работа заключается в отправке сообщения о закрытии форме. Но ведь до этого момента приложение будет работать и будет выполнять кучу кода. И снова, это не имеет значение в простой программе (разве что иногда вы можете увидеть "моргание окна").
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 02.06.2011, 22:47   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В MDI-шных приложениях использую для обработки исключений не обработанных в формах Application.OnException
Код:
procedure TFMDIForm.ApplicationException(Sender: TObject; E: Exception);
begin
  Application.ShowException(E);
  Application.MainForm.Close;
end;
В основном эти исключения связаны с ошибками программиста. Исключения связанные с обращением к базе, файлам и т.п. обычно в обрабатываю в соответствующих местах без вываливания из проекта. С проблемами пока не сталкивался. Хотелось бы услышать чем это хуже Halt, Application.terminate или способа предложенного в посте 9
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.06.2011, 22:52   #14
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Да вполне нормально.

Цитата:
или способа предложенного в посте 9
Вы путаете стадии работы приложения. Автор темы говорит про инициализацию.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 02.06.2011, 23:01   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Вы путаете стадии работы приложения. Автор темы говорит про инициализацию.
Точно, полная расконцетрация, на даче под солнцем пол дня провел.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.06.2011, 23:02   #16
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Автор темы говорит про инициализацию.
Да, обработка на стадии инициализации. Если файл с конфигурациями не найден, то не запускать приложение. А во время работы программы, она обращается к еще целой куче файлов, но подразумевается, что эти файлы всегда на своем месте: они идут всегда вместе с программой. Их отсутствие я даже не рассматриваю, т.к. это будет являться намеренным их удалением. Как говорится: "От дурака защиты нет".
Не стоит удалять рабочие файлы программы
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 02.06.2011, 23:04   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Vova777 Посмотреть сообщение
Да, обработка на стадии инициализации. Если файл с конфигурациями не найден, то не запускать приложение. А во время работы программы, она обращается к еще целой куче файлов, но подразумевается, что эти файлы всегда на своем месте: они идут всегда вместе с программой. Их отсутствие я даже не рассматриваю, т.к. это будет являться намеренным их удалением. Как говорится: "От дурака защиты нет".
Зря вы так, очень даже не полохо было бы выдать нормальное сообщение в случае отсутствия одного из этих файлов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.06.2011, 23:06   #18
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Зря вы так, очень даже не полохо было бы выдать нормальное сообщение в случае отсутствия одного из этих файлов
Не стоит удалять рабочие файлы программы. А так они всегда идут вместе с ней.
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 02.06.2011, 23:25   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Не стоит удалять рабочие файлы программы. А так они всегда идут вместе с ней.
даже в таком случае, лучше сказать пользователю что программа/её компонент поврежден, переустановите приложение.(+еще можно указать на поврежденный компонент)
чем просто скрываться.
пользователь в вашем случае просто удалит приложение.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.06.2011, 23:36   #20
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
даже в таком случае, лучше сказать пользователю что программа/её компонент поврежден, переустановите приложение.(+еще можно указать на поврежденный компонент)
чем просто скрываться.
пользователь в вашем случае просто удалит приложение.
Да, я согласен. Я тоже подумал, и решил, что все же стоит включить обработку таких моментов. Лучше указать на поврежденный либо отсутствующий файл и предложить переустановить приложение, чем предоставить этот момент пользователю. Так будет намного лучше, когда приложение корректно завершится с указанием причины, нежели будет иметь место аварийный вылет. Ведь удаление файлов может произойти по разным причинам, не зависящим от действий пользователя либо по его вине. Обработка таких исключений должна быть обязательно добавлена.
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка исключений Ckomoroh Общие вопросы Delphi 6 21.03.2011 08:52
обработка исключений user666 Помощь студентам 36 27.08.2010 18:00
ошибка при закрытии формы после обработки в потоке furstenberg Общие вопросы Delphi 7 05.07.2010 12:19
Обработка исключений _-Re@l-_ Общие вопросы Delphi 3 17.06.2010 08:53
WebBrowser и ошибка 404, идея ее обработки celovec Работа с сетью в Delphi 3 22.02.2009 19:40