- •Delphi функции для работы с файлами
- •Работа с дополнительными формами Delphi
- •Работа с дополнительными формами Delphi
- •Форма Form1 содержит вызов формы Form2, которая объявлена в модуле Unit2, но который отсутствует в списке используемых модулей. Вы хотите добавить его?
- •Создание собственных процедур и функций Delphi
- •Пример. Вычисление факториала
- •Урок Delphi 10 Обработка исключительных ситуаций в Delphi
- •Компоненты Delphi Урок 11 Обзор палитры компонентов Delphi
- •Страница Standart
- •Страница Standart
- •Страница System
- •Страница System
- •Компонент Delphi Timer
- •Урок Delphi 12 Работа со строками Delphi
- •StringList Delphi - работа со списком строк
- •Обзор алгоритмов сортировки
- •Модификация: Алгоритм сортировки вставками и его реализация в Delphi
- •Урок Delphi 13 Создание интерфейса пользователя
- •Урок Delphi 14: Мультимедийные возможности Delphi Графика в Delphi
- •Потоки в Delphi Организация многопоточной работы в Delphi
- •Применение потоков
- •Особености взаимодействия потоков с объектами vcl
- •Использование метода Synchronize при работе с потоками
- •Компоненты Delphi Динамическое создание компонентов в Delphi
- •С чего начать изучение программирования?
Урок Delphi 10 Обработка исключительных ситуаций в Delphi
Исключительные ситуации в Delphi встречаются постоянно. Исключительная ситуация это такая ситуация, в результате которой генерируется ошибка, и выполнение программы прерывается. Именно потому такая ситуация и называется исключительной. Например, деление на ноль - классический пример исключительной ситуации. Как в такой ситуации действует человек? Если он пытается что-то сделать, и это не получается - он идёт другим путём. Так же и компьютер, следующий программе, умеющей обрабатывать исключительные ситуации. Он не бросает выполнение программы, не виснет, а обходит исключительную ситуацию, выполняя альтернативный вариант фрагмента, в которой исключительная ситуация возникла. Возникает вопрос, почему бы не поставить проверку, например, на равенство нулю знаменателя при делении? Можно и поставить. Но во многих случаях источник исключительной ситуации далеко не так очевиден, а на все случаи жизни проверки не введёшь. Итак, для контроля исключительных ситуаций программист должен подготовить как основной вариант фрагмента, гдевозможна исключительная ситуация, так и его вариант, в котором она заведомо невозможна, или выводится информационное сообщение для пользователя. Вот как выглядит оператор контроля исключительных ситуаций: try основные операторы фрагмента; except альтернативный вариант фрагмента; end; Вначале производится попытка выполнить операторы секции try/except, содержащие основной вариант программы. При возникновении в каком-либо операторе этой секции исключительной ситуации остальные операторы секции пропускаются, и выполняется секция except/end. Если всё "проходит штатно", то секция except/end пропускается. Ещё один вариант оператора контроля исключительных ситуаций применяется, когда необходимо, чтобы определённый фрагмент кода выполнился в любом случае, возникла исключительная ситуация или нет: try операторы finally заключительные действия end; Основные операторы, находящиеся в секции try, могут пройти штатно, или вызвать исключительную ситуацию. Операторы заключительных действий, находящиеся в секции finally, будут выполнены в любом случае. Есть ещё один способ контроля исключительных ситуаций, касающийся ошибок операций ввода-вывода. Перед участком программы, где возможны ошибки ввода-вывода (а это, по сути, все операторы ввода-вывода), ставится директива {$I-}, заставляющая компилятор не включать в код автоконтроль ошибок ввода-вывода. Таким образом, в случае ошибки ввода или вывода программа не прерывается. В конце участка с операторами ввода-вывода ставится директива, включающая автоконтроль: {$I+}. Затем анализируется результат вызова функции IOResult. Если функция IOResult(вызывается без параметров) возвращает 0, значит ошибок ввода-вывода на данном участке не было. Вот какой пример использования директив {$I} и функции IOResult содержит справка системы Delphi: var F: file of Byte; begin if OpenDialog1.Execute then begin AssignFile(F, OpenDialog1.FileName); {$I-} Reset(F); {$I+} if IOResult = 0 then begin MessageDlg('File size in bytes: ' + IntToStr(FileSize(F)), mtInformation, [mbOk], 0); CloseFile(F); end else MessageDlg('File access error', mtWarning, [mbOk], 0); end; end; Функция IOResult досталась Delphi в наследство от Turbo Pascal. Тот же самый фрагмент можно составить и с использованием оператора try. На мой взгляд, это удобнее и проще. При работе программы под управлением Delphi, система будет сама реагировать на исключительные ситуации, мешая работе операторов обработки исключений. Чтобы проверить их действие, можно запускать программу непосредственно, сворачивая Delphi и пользуясь ярлыком, установленном на Рабочем столе. Или можно отключить реакцию системы на исключительные ситуации, тем самым давая возможность отработать специально для этого написанным фрагментам программы - нашим операторам try/except/end. Для этого откроем пункт системного меню Delphi Tools -> Debugger Options.... В появившемся окошке нужно снять галку в чекбоксе Stop on Delphi Exceptions, расположенном на вкладкеLanguage Exceptions. Теперь система Delphi будет предоставлять вашей программе возможность самостоятельно обрабатывать исключительные ситуации, среди которых могут быть и ситуации, возникновение которых прописано специально как удобный инструмент достижения необходимых результатов.
