
- •Первая программа
- •Целые числа
- •Вещественные числа
- •Процедуры
- •Функции
- •События
- •Строковые типы данных
- •Символьные типы данных
- •Логический тип данных
- •Пройденный материал на практике
- •Оператор цикла repeat...Until
- •Форма About средствами Delphi
- •Функции работы с символами
- •Файлы проекта
- •Строка и строки tStrings
- •ListBox – список выбора
- •Примеры исключений с Try ... Finally ...
- •Работа с базами данных в Delphi
Примеры исключений с Try ... Finally ...
|
В конструкции Try-Finally, инструкция Finally выполняется независимо от того, что произойдет в предложении Try. try {операторы, способные создать исключительную ситуацию}; finally {защищенные операторы, выполняемые в любом случае}; end; ПРИМЕР 1: Написать программу для вычисления результата от деления одного числа на другое. Числа вводятся с клавиатуры. При выполнении деления использовать конструкцию try … finally var number_1, number_2 :Integer; result:real; begin number_1:=StrToInt(Edit1.Text); number_2:=StrToInt(Edit2.Text); Try result := number_1/ number_2; ShowMessage(' result = '+FloatToStr(result)); Finally ShowMessage('Второе число равно нулю. Деление на число ноль. Введите другое число и повторите попытку'); end; end;
ПРИМЕР 2: Исправить программу примера 1, таким образом, чтобы при вводе чисел предусмотреть возможность обработки возникшего исключения (например, вместо целого числа ввели дробное, или вместо числа ввели букву)
var number_1, number_2 :Integer; result:real; begin Try number_1:=StrToInt(Edit1.Text); number_2:=StrToInt(Edit2.Text); Try result := number_1/ number_2; ShowMessage(' result = '+FloatToStr(result)); Finally ShowMessage('Второе число равно нулю. Деление на число ноль. Введите другое число и повторите попытку'); end; Finally ShowMessage('Вы ввели не правильные исходные данные'); end; end; Примечание: В программе использованы вложенные инструкции Try:
ПРИМЕР 3: Деление на ноль с предложением finally.
var number, zero : Integer; begin // Попытка деленя целого числа на нуль - чтобы поднять исключение number := -1; Try zero := 0; number := 1 div zero; ShowMessage('number / zero = '+IntToStr(number)); Finally if number = -1 then begin ShowMessage('Числу не было присвоено значение - использование значения по умолчанию'); number := 0; end; end; end; Примечание: Числу не было присвоено значение - использование значения по умолчанию. Затем, программа заканчивается с сообщением об ошибке EDivByZero -, предложение finally не выловило ошибку.
ПРИМЕР 4: Печать Try {операция печати} finally on E: Eprinter do Showmessage(E.Message); //Вывести сообщение об ошибке end;
ПРИМЕР 5:
Object1 := TObject1.Create; try Object2 := TObject2.Create; try Object1.DoWork; Object2.DoWork; finally Object2.Free; end; finally Object1.Free; end;
ПРИМЕР 6: try try EnumThreadWindows(CurrentThreadID, @Disable, 0); Result := TaskWindowList; except EnableTaskWindows(TaskWindowList); raise; end; finally TaskWindowList := SaveWindowList; TaskActiveWindow := SaveActiveWindow; end; |