Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс DELPHI_2003.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
530.71 Кб
Скачать

Примеры исключений с 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;