Класи виняткових ситуацій в delphi, delphi, компоненти delphi, вихідні коди delphi

Класи виняткових ситуацій в Delphi

Класи виняткових ситуацій іменуються починаючи з букви "Е", а базовий клас просто називається Exception. Цей базовий клас містить необхідну функціональність, яку успадковують всі об'єкти помилок. Тут можна виділити властивість Message. в якому міститься повідомлення про помилку і функції роботи з файлом допомоги, через які можна викликати файл довідки з описом сталася помилки.

У бібліотеці VCL зумовлено досить велика кількість класів на різні типи помилок, і всі вони є спадкоємцями Exception. Наприклад, клас EinOutError відповідає помилку введення-виведення. Такі помилки виникають при зверненні до дисків.

Коли відбувається помилка, то створюється об'єкт, який є спадкоємцем класу, відповідного типу помилку. Так, якщо сталася помилка введення-виведення, то буде створений екземпляр класу EinOutError.

Давайте розглянемо приклад з лістингу 8.10, де в блоці обробки помилок я намагаюся розділити число на нуль, що заборонено. Результат ділення заноситься в змінну t. Зверніть увагу, що після цього я роблю перевірку if. Ця перевірка абсолютно безглузда і додана тільки для того, щоб після поділу було хоч якесь звернення до змінної. Якщо ніякого звернення не буде, то Delphi бачить безглуздість поділу і оптимізатор робить його.

t, r: Double; begin try r: = 0; t: = 10 / r; if t> 0 then exit; except
// обробка помилки введення-виведення

on EinOutError do begin

ShowMessage ( 'Ошибочка введення-виведення'); end;

// обробка поділу на нуль

EZeroDivide do begin.

ShoWMessage ( 'Ну не можна ділити на нуль.' + Е.Message); end; // Інакше else

ShowMessage ( 'Чи не зрозумів у чому справа, але щось сталося');

В даному випадку в блоці except йде два блоки обробки різних типів помилок. Щоб перевірити, чи не сталася помилка введення-виведення, пишемо наступний блок:

on [змінна. ] Класс_ошібкі do begin

// Помилка вводу-виводу end;

Якщо дослівно перекласти, що тут написано, то це буде виглядати так: в разі помилки виконати код між begin і end. Зверніть увагу, що змінну я уклав в квадратні дужки. Це означає, що змінну заводити не обов'язково, що ми і робимо при обробці помилки введення-виведення:

on EInOutError do begin

Shovfllessage ( 'Ошибочка введення-виведення'); end;

У разі помилки викликається функція showMessage, яка відображає на екрані вікно діалогу з повідомленням, яке зазначено в якості параметра.

А тепер подивимося на те, як ми обробляємо помилку ділення на нуль:

on е: EZeroDivide do begin

ShowMessage ( 'Ну не можна ділити на нуль.' + Е.Message); end;

Помилку ділення на нуль відповідає клас EZeroDivide. Перед класом помилки написана змінна з ім'ям е. Через неї ми зможемо дізнатися повідомлення про помилку, наприклад, так е.Message.

Крім цього, в блоці except лістингу 8.10 варто ще ключове слово else, як при логічної операції. Зверніть увагу, що після end прямо перед else стоїть крапка з комою, хоча ми знаємо, що це її не потрібно ставити. Непотрібно тільки для логічних операцій. В даному випадку else використовується для обробки виняткових ситуацій, і операція після цього ключового слова буде виконана, якщо до цього похибка не була оброблена. Тобто якщо сталася помилка, яка не була оброблена блоком on помилка do, то буде виконаний код після else.

Отже, спробуйте створити новий додаток, помістити на нього кнопку і за її натисканні написати код з лістингу 8.10. Запустіть приклад і краще зробіть це з Delphi. Тепер спробуйте натиснути на кнопку. Відбудеться помилка, і Delphi перехопить на себе управління, покаже рядок коду, де сталася виняткова ситуація, і покаже вікно діалогу з повідомленням, що описує помилку.

Оглянувши рядок коду, де сталася помилка, натискаємо клавішу . щоб продовжити виконання програми. І в цей момент управління буде передано нашій програмі, і ви побачите повідомлення, яке ми показуємо за допомогою функції ShowMessage У блоці except.

Якби ви запустили програму не з Delphi. а з файлового менеджера активували виконуваний файл, створений в Delphi. то в момент помилки ви побачили б лише друге повідомлення, яке ми відображаємо за допомогою функції SenMessage.

Повідомлення можуть генеруватися не тільки виконується середовищем, а й вручну. Щоб згенерувати своє повідомлення, використовується оператор raise. Після цього оператора потрібно вказати об'єкт помилки. Саме об'єкт, т. Е екземпляр якогось класу помилки.

Давайте подивимося, як можна вручну згенерувати помилку введення-виведення. Щоб створити новий об'єкт цього класу, потрібно викликати метод create, а цього методу передається повідомлення, яке буде відображатися, коли спрацює подія.

Отже, конструктор create поверне нам екземпляр класу помилки введення-виведення. Його ми і повинні вказати після оператора raise:

raise EinOutError.Create ( 'Помилка вводу-виводу');

Ви можете створити власний клас помилки, наростити його можливості, як душа забажає, і використовувати його. Давайте подивимося, як це буде виглядати на прикладі. Створимо клас MyException, який буде є спадкоємцем базового класу всіх помилок - Exception:

MyException = class (Exception) public

function MyException.GetSomeStr: String;

Result: = 'Це моя рядок';

Тепер помістіть на форму кнопку і за її натисканні напишіть наступний код: try

raise MyException.Create ( 'Тест'); except on e: MyException do

У розділі try ми вручну генеруємо помилку власного типу MyException. У розділі except ми перехоплюємо цю помилку і за допомогою функції ShowMessage відображаємо результат функції GetSomeStr. Ось так все просто і красиво.

Допоможи проекту! Розкажи друзям про цей сайт: