В тех ситуациях, когда реакция программы на возникшую ошибку не так важна, как корректное завершение фрагмента программы, вызвавшего исключение, используется блок Try-finally-end. Например, это ситуации связанные с необходимостью вернуть операционной системе ресурсы. При этом не важно возникала ли или нет ошибка при работе с этим ресурсом.
Синтаксис:
Try
<Фрагмент программы1>
Finally
<Фрагмент программы2>
End
Правило действия:
- Выполняется фрагмент программы1.
- Если в первом фрагменте возникла ошибка, то он прерывает свою работу и управление передается в блок Finally-End.
- Если в первом фрагменте нет ошибок, то он выполняется полностью, а затем управление передается в блок Finally-End.
Пример:
var b:TBitmap begin b:= TBitmap.Create; TRY b.Canvas.Rectangle(1,1,100,100); FINALLY b.free; END; |
Замечание для практики:
В настройках по умолчанию среда Delphi автоматически перехватывает управление программой при каждом исключении. Поэтому блоки обработки исключений работать не будут. Для устранения этого необходимо вызвать пункт меню Tools\Debugger Options и на странице Language Exception убрать флажок в переключателе Stop on Delphi Exception.
Динамические массивы (для использования при работе с файлами)
Использование функции SetLength:
var k:array of integer;
SetLength(k,5);
High(k) – возвращает максимальное значение индекса в массиве k (элементов в массиве к+1, т.к. нумерация идет с 0).