Каталог статей
Меню сайта

Категории каталога
Язык программирования Delphi [27]

Форма входа

Поиск по каталогу

Друзья сайта

Наш опрос
Переходишь ли ты на Vista?
Всего ответов: 176

Приветствую Вас, Гость · RSS 12.05.2026, 14:01

Начало » Статьи » Язык программирования Delphi

Исключительные ситуации.
Сегодня мы познакомимся с исключительными ситуациями. Для чего они нужны? Допустим, что у тебя есть участок кода, где может произойти ошибка. Как сделать так, чтобы программа не вылетала при её возникновении? Очень просто. Надо заключить этот код в блок проверки исключений и тогда твоя прога выдержит даже цунами :).

И так. Простейший блок исключений выгляди как:

TRY
//Здесь ты пишешь код, в котором может произойти ошибка
EXCEPT
//Если ошибка произошла, то выполнится этот код
END;

Рассмотрим простейший пример:

TRY
x:=y/0;
EXCEPT
Application.MessageBox('На ноль делить нельзя.','Ошибка!',
MB_OK + MB_ICONINFORMATION);
END;
x:=0;

Между TRY и EXCEPT я вставил маленькое действие - деление на ноль. Компьютер не умеет делать такие вещи, поэтому произойдёт ошибка и выполнится код между EXCEPT и END. После обработки ошибки процедура заканчивает выполнение и все остальные операторы не будут выполнены, как, например, в нашем случае - x:=0;

Если бы мы поменяли 0 на любое другое число, то ошибки бы не было и код между EXCEPT и END никогда не выполнился бы.

Давай посмотрим ещё пример:

var
b:TBitmap
begin
b:= TBitmap.Create;
TRY
b.Canvas.Rectangle(1,1,100,100);
EXCEPT
Application.MessageBox('Ошибка рисования.','Ошибка!',
MB_OK + MB_ICONINFORMATION);
b.free;
END;
b.free;
end;

В этом примере мы создаём объект b типа TBitmap. Потом начинаем блок TRY. В этом блоке мы пытаемся начать рисование. Если во время рисования произошла ошибка, то вызывается окно с сообщенеием Application.MessageBox и освобождается память b.free. После этого происходит выход из процедуры. Если ошибок не было, то просто освобождается память b.free.

Теперь давай разберёмся с ещё одним типом исключительных ситуаций - TRY ... FINALLY:

TRY
//Здесь ты пишешь код, в котором может произойти ошибка
FINALLY
//Этот код выполнится в любом случае
END;

Между TRY и FINALLY ты пишешь свой сомнительный код, в котором может произойти ошибка. А между FINALLY и END ты пишешь код, который должен выполнится в не зависимости от результата кода. В этом случае мы не можем информировать пользователя об ошибки, потому что в разделе FINALLY мы не знаем произошла ошибка или нет. Зато вот такой пример будет уместен:

var
b:TBitmap
begin
b:= TBitmap.Create;
TRY
b.Canvas.Rectangle(1,1,100,100);
FINALLY
b.free;
END;
end;

Подобный пример мы уже рассматривали. В этом случае мы создаем объект b и пытаемся нарисовать. В разделе FINALLY мы удаляем созданный объект b. Теперь мы уверены, что b всегда будет удалён корректно и мы освободим память.

Опять сложный материал превратился в очень простой.

Категория: Язык программирования Delphi | Добавил: proDelphi (10.06.2007) | Автор: Михаил Фленов
Просмотров: 763 | Рейтинг: 0.0 |

Всего комментариев: 0
Имя *:
Email *:
Код *: