19.3. Основные исключительные ситуации
Приведем список основных исключительных ситуаций:
• Exception – базовый класс–предок всех обработчиков исключительных ситуаций;
• EAbort – «скрытое» исключение. Его используют тогда, когда нужно прервать процесс с условием, что пользователь программы не должен видеть сообщения об ошибке. Для удобства использования в модуле SysUtils предусмотрена процедура Abort;
• EComponentError – вызывается в двух ситуациях:
1) при попытке регистрации компонента за пределами процедуры Register;
2) когда имя компоненты не уникально или не допустимо;
• EConvertError – происходит в случае возникновения ошибки при выполнении функций StrToInt и StrToFloat, когда конвертация строки в соответствующий числовой тип невозможна;
• EInOutError – происходит при ошибках ввода/вывода при включенной директиве {$I+};
• EIntError – предок исключений, случающихся при выполнении целочисленных операций:
1) EDivByZero – вызывается в случае деления на ноль, как результат RunTime Error 200;
2) EIntOverflow – вызывается при попытке выполнения операций, приводящих к переполнению целых переменных как результат RunTime Error 215 при включенной директиве {$Q+};
3) ERangeError – вызывается при попытке обращения к элементам массива по индексу, выходящему за пределы массива, как результат RunTime Error 201 при включенной директиве {$R+};
o EInvalidCast – происходит при попытке приведения переменных одного класса к другому классу, не совместимому с первым (например, приведение переменной типа TListBox к TMemo);
o EInvalidGraphic – вызывается при попытке передачи в LoadFromFile файла, несовместимого графического формата.
o EInvalidGraphicOperation – вызывается при попытке выполнения операций не применимых для данного графического формата (например, Resize для TIcon);
o EInvalidObject – реально нигде не используется, объявлен в Controls.pas;
o EInvalidOperation – вызывается при попытке отображения или обращения по Windows–обработчику (handle) контрольного элемента, не имеющего владельца (например, сразу после вызова MyControl:=TListBox.Create(...) происходит обращение к методу Refresh);
o EInvalidPointer – происходит при попытке освобождения уже освобожденного или еще не инициализированного указателя при вызове Dispose(), FreeMem() или деструктора класса;
o EListError – вызывается при обращении к элементу наследника TList по индексу, выходящему за пределы допустимых значений (например, объект TStringList содержит только 10 строк, а происходит обращение к одиннадцатой строке);
o MathError – предок исключений, случающихся при выполнении операций с плавающей точкой:
1) EInvalidOp – происходит, когда математическому сопроцессору передается ошибочная инструкция. Такое исключение не будет до конца обработано, пока Вы контролируете сопроцессор напрямую из ассемблерного кода;
2) EOverflow – происходит как результат переполнения операций с плавающей точкой при слишком больших величинах. Соответствует RunTime Error 205;
3) Underflow – происходит как результат переполнения операций с плавающей точкой при слишком малых величинах. Соответствует RunTime Error 206;
4) EZeroDivide – вызывается в результате деления на ноль;
o EMenuError – вызывается в случае любых ошибок при работе с пунктами меню для компонент TMenu, TMenuItem, TPopupMenu и их наследников;
o EOutlineError – вызывается в случае любых ошибок при работе с TOutLine и любыми его наследниками;
o EOutOfMemory – происходит в случае вызовов New(), GetMem() или конструкторов классов при невозможности распределения памяти. Соответствует RunTime Error 203;
o EOutOfResources – происходит в том случае, когда невозможно выполнение запроса на выделение или заполнение тех или иных Windows ресурсов (например таких, как обработчики – handles);
o EParserError – вызывается когда Delphi не может произвести разбор и перевод текста описания формы в двоичный вид (часто происходит в случае исправления текста описания формы вручную в IDE Delphi);
o EPrinter – вызывается в случае любых ошибок при работе с принтером.
o EProcessorException – предок исключений, вызываемых в случае прерывания процессора – hardware breakpoint. Никогда не включается в DLL, может обрабатываться только в «цельном» приложении.
1) EBreakpoint вызывается в случае останова на точке прерывания при отладке в IDE Delphi. Среда Delphi обрабатывает это исключение самостоятельно;
2) EFault – предок исключений, вызываемых в случае невозможности обработки процессором тех или иных операций;
EGPFault – вызывается, когда происходит «общее нарушение защиты» – General Protection Fault. Соответствует RunTime Error 216;
EInvalidOpCode – вызывается, когда процессор пытается выполнить недопустимые инструкции;
EPageFault – обычно происходит как результат ошибки менеджера памяти Windows, вследствие некоторых ошибок в коде вашего приложения. После такого исключения рекомендуется перезапустить Windows;
EStackFault – происходит при ошибках работы со стеком, часто вследствие некорректных попыток доступа к стеку из фрагментов кода на ассемблере. Компиляция ваших программ со включенной проверкой работы со стеком {$S+} помогает отследить такого рода ошибки;
3) ESingleStep – аналогично EBreakpoint, это исключение происходит при пошаговом выполнении приложения в IDE Delphi, которая сама его и обрабатывает;
o EPropertyError – вызывается в случае ошибок в редакторах свойств, встраиваемых в IDE Delphi. Имеет большое значение для написания надежных property editors. Определен в модуле DsgnIntf.pas;
o EResNotFound – происходит в случае тех или иных проблем, имеющих место при попытке загрузки ресурсов форм – файлов .DFM в режиме дизайнера. Часто причиной таких исключений бывает нарушение соответствия между определением класса формы и ее описанием на уровне ресурса (например, вследствие изменения порядка следования полей–ссылок на компоненты, вставленные в форму в режиме дизайнера);
o EStreamError – предок исключений, вызываемых при работе с потоками;
1) EFCreateError – происходит в случае ошибок создания потока (например, при некорректном задании файла потока).
2) EFilerError – вызывается при попытке вторичной регистрации уже зарегистрированного класса (компонента). Является также предком специализированных обработчиков исключений, возникающих при работе с классами компонентов;
EClassNotFound – обычно происходит, когда в описании класса формы удалено поле–ссылка на компонент, вставленный в форму в режиме дизайнера. Вызывается, в отличие от EResNotFound, в RunTime;
EInvalidImage – вызывается при попытке чтения файла, не являющегося ресурсом, или разрушенного файла ресурса специализированными функциями чтения ресурсов (например, функцией ReadComponent);
EMethodNotFound – аналогично EClassNotFound, только при несоответствии методов, связанных с теми или иными обработчиками событий;
EReadError – происходит в том случае, когда невозможно прочитать значение свойства или другого набора байт из потока (в том числе ресурса);
3) EFOpenError – вызывается, когда тот или иной специфированный поток не может быть открыт (например, когда поток не существует);
o EStringListError – происходит при ошибках работы с объектом TStringList (кроме ошибок, обрабатываемых TListError).
Среда Delphi по умолчанию перехватывает все возникающие исключительные ситуации. Но в случае проверки правильности обработки в вашей программе исключительных ситуаций следует в меню Tools/Debugging Options… отключить флаг Stop On Delphi Exceptions, и тогда среда Delphi перестанет реагировать на исключительные ситуации, возникающие в отлаживаемой программе.
Для целей отладки программы в Delphi имеется процедура
Procedure Assert(Key:Boolean [; const msg:String]);
Ей соответствует исключительная ситуация EAsserttionFailed. При вызове этой функции проверяется значение параметра Key: если оно равно True, то ничего не происходит, а если – False, то возникает исключительная ситуация EAsserttionFailed. Стандартный обработчик этой ситуации показывает в диалоговом окне имя файла с исходным текстом и номер строки, где произошла исключительная ситуация. Включение и отключение этой исключительной ситуации можно осуществлять директивой компилятора {$C+} или {$C-}.
- Программирование в среде Delphi
- Программирование в среде Delphi
- 1. История развития вычислительной техники, системы счисления и единицы информации.................................................7
- 2. Структура персонального компьютера и операционные системы.........................................................................13
- 3. Основы алгоритмизации и работа в delphi..........................18
- 4. Базовые элементы delphi...................................................................26
- 5. Стандартные функции и подпрограммы................................30
- 6. Операторы delphi......................................................................................33
- 7. Операторы циклов....................................................................................35
- 18. Выделение памяти под объект и прародитель всех классов – tobject..........................................................................................84
- 19. Обработка исключительных ситуаций................................87
- 20. Основные классы и общие свойства компонентов...93
- 26. Технология com.....................................................................................129
- 1. История развития вычислительной техники, системы счисления и единицы информации
- 1.1. История развития вычислительной техники
- 1.2. Системы счисления
- 1.3. Единицы информации
- 2. Структура персонального компьютера и операционные системы
- 2.1. Структура персонального компьютера.
- 2.2. Операционные системы
- 3. Основы алгоритмизации и работа в delphi
- 3.1. Основы программирования
- 3.2. Программирование в среде Delphi
- 4. Базовые элементы delphi
- 4.1. Алфавит среды Delphi
- 4.2. Константы
- 4.3. Переменные
- 4.4. Основные типы переменных
- 4.5. Операции над переменными и константами
- 5. Стандартные функции и подпрограммы
- 5.1. Математические функции
- 5.2. Функции преобразования
- 5.3. Дополнительные системные подпрограммы и функции
- 6. Операторы delphi
- 6.1. Оператор присваивания
- 6.2. Оператор безусловной передачи управления
- 6.3. Условный оператор if
- 6.4. Оператор разветвления Case
- 6.5. Составной оператор
- 7. Операторы циклов
- 7.1. Оператор цикла For
- 7.2. Оператор цикла Repeat
- 7.3. Оператор цикла While
- 8. Работа с массивами
- 9. Работа со строками
- 9.1. Процедуры работы со строками
- 9.2. Функции работы со строками
- 10. Работа с записями
- 11. Процедуры и функции
- 12. Модуль unit
- 13. Работа со множествами
- 14. Работа с файлами
- 14.1. Текстовые файлы
- 14.2. Типированные файлы
- 14.3. Нетипированные файлы
- 15. Работа с файлами и каталогами
- 16. Динамические переменные и структуры данных
- 16.1. Динамические переменные
- 16.2. Работа со стеком
- 16.3. Работа со списками или очередями
- 16.4. Работа с деревьями
- 17. Основы объектно–ориентированного программирования
- 17.1. Объекты и классы
- 17.2. Области видимости класса
- 17.3. Свойства (Property) и инкапсуляция
- 17.4. Методы, наследование и полиморфизм
- 17.5. События (Events)
- 18. Выделение памяти под объект и прародитель всех классов – tobject
- 18.1. Выделение памяти под объект
- 18.2. Описание класса tObject
- 18.3. Операторы приведения типов классов
- 19. Обработка исключительных ситуаций
- 19.1. Два вида оператора Try
- 19.2. Программное создание исключительной ситуации
- 19.3. Основные исключительные ситуации
- 20. Основные классы и общие свойства компонентов
- 20.1. Класс tList
- 20.2. Класс tStrings
- 20.3. Общие свойства компонентов
- 21. Графические возможности delphi
- 21.1. Класс Tcanvas
- 21.2. Классы тGгарhic и тРicture
- 21.3. Классы tFont, tPen и tBrush
- 21.4. Работа с изображениями
- 22. Визуальные компоненты delphi
- 22.1. Компонент tBitBtn
- 22.2. Компоненты tDrawGrid и tStringGrid
- 22.3. Компонент tPageControl
- 22.4. Компонент tTimer
- 22.5. Компонент tGauge
- 22.6. Компонент tСolorGrid
- 23. Стандартные диалоговые окна и типовые диалоги
- 23.1. Стандартные диалоговые окна
- 23.2. Типовые диалоги
- 24. Форма, приложение и глобальные объекты
- 24.1. Форма и ее свойства
- 24.2. Объект Application
- 24.3. Глобальные объекты
- Объект ClipBoard
- Объект Screen
- Объект Printer
- 25. Межпрограммное взаимодействие
- 25.1. Обмен сообщениями
- 25.2. Динамический обмен данными
- 25.3. Совместное использование общей памяти
- 25.4. Каналы
- 25.5. Сокеты
- 26. Технология com
- 26.1. Интерфейс
- 27. Технология автоматизации
- 27.1. Основы ole Automation
- 27.2. Примеры использования серверов автоматизации
- 27.3. Компоненты ActiveX
- 28. Динамические библиотеки
- 28.1. Создание dll
- 28.2. Использование dll
- 28.3. Пример написания dll
- 29. Работа с базами данных
- 29.1. Основные определения
- 29.2. Взаимодействие приложения на Delphi с базами данных
- 29.3. Компоненты взаимодействия с базами данных
- If adoTable1.Locate(’fio,stag’,varArrayOf([’Иванов’,’10’]),[])Then …;
- 29.4. Работа с локальной базой данных
- 30. Основы языка sql
- 30.1. Составные части sql
- 30.2. Команда select
- 30.3. Пример использования запросов в Delphi
- 31. Создание собственных компонентов
- 32. Работа с реестром
- 33. Перспективы программирования в delphi
- Литература
- 220013, Минск, п.Бровки, 6