Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Исключительные ситуации (класс Exception)

Читайте также:
  1. OLAP-технологии анализа и прогнозирования деловой ситуации
  2. Административная (классическая) школа в управлении.
  3. Административное управление (классическая школа)
  4. Анализ ситуации
  5. Анализ ситуации
  6. АНАЛИЗ СИТУАЦИИ
  7. Анализ ситуации в области охраны окружающей среды и экологического контроля 25.01.2012.
  8. Анализ ситуации внешнего управления, его средств и результатов
  9. Анализ сложившийся ситуации в АПК
  10. Анализ современной российской экономической ситуации

ОС WINDOWS - это многозадачная операционная система с графическим интерфейсом. Пользователь может открывать несколько программ и управлять порядком их выполнения. В ОС WINDOWS монитор работает в графическом режиме. Пользовательский интерфейс - это то, что видно на экране монитора при старте и во время работы системы, а также способы выполнения типовых операций.

В основе интерфейса WINDOWS лежат объекты. Как и объекты реального мира, объекты WINDOWS обладают некоторыми свойствами и с ними можно выполнять различные действия. Объектами в WINDOWS являются:

- файлы программ, файлы данных;

- ярлыки, папки, каталог "рабочий стол", каталог "Главное меню";

- окна и рамки, ограничивающие рабочую область экрана;

- меню для выбора режимов работы и выполнения команд;

- кнопки для активизации тех или иных действий;

- диалоговые окна для взаимодействия с пользователем.

В ОС Windows объекты на экране - рисованные. Инструментами для изменения свойств этих объектов являются мышь (основной инструмент) и клавиатура. В зависимости от объекта, на который указывает курсор мыши, возможны четыре действия:

- одинарный щелчок (нажать и отпустить) левой кнопкой;

- одинарный щелчок (нажать и не отпускать) левой кнопкой;

- двойной щелчок левой кнопкой;

- одинарный щелчок правой кнопкой мыши.

Если при описании действий не указано название кнопки, то подразумевается левая кнопка.

Кнопками мыши можно выполнять следующие действия:

- активизировать объект, выполнять различные действия (один щелчок);

- активизировать приложения (двойной щелчок по ярлыку);

- перетаскивать объект (нажать и протащить не отпуская);

- открывать контекстное меню (щелчок правой кнопкой).

Контекстное меню, это меню, которое, по мнению разработчиков ОС или прикладной программы, в данной пространственной точке и в данный момент времени будет полезно пользователю.

Для просмотра свойств того или иного объекта Windows и действий, которые можно с ним выполнять, надо установить на объект указатель мыши, щелкнуть правой кнопкой мыши и из появившегося контекстного меню выбрать пункт "Свойства". На открывающихся вкладках можно изменять свойства объекта.

Особыми свойствами обладают два каталога: "Рабочий стол" и "Главное меню". После загрузки Windows на экране появляется "Рабочий стол", на котором размещаются различные графические объекты, изображающие программы, документы, различные устройства. В нижней части экрана располагается панель задач. С помощью кнопки "Пуск", расположенной в левом углу этой панели, можно открыть папку "Главное меню".

При открытии папки, документа или запуске программы на панели задач появляется кнопка с именем программы или папки. По количеству кнопок на панели задач можно определить, сколько в данный момент открыто окон.

 

2.4.2. Основные особенности ОС WINDOWS

Длина имени файла вместе с расширением в ОС WINDOWS может достигать 255 символов. Имя от расширения отделяется последней точкой (точки в имени разрешены). В имени и расширении нельзя использовать символы: " * ", "? ", "/", "|", "\" и символ кавычек. При обращении к файлу строчные и прописные буквы неразличимы (к файлу MYText.txt можно обратиться как mytext.txt). В именах можно использовать буквы как латинского, так и русского алфавитов. Имеется несколько зарезервированных слов, которые нельзя использовать в качестве имен файлов (эти имена присвоены определенным устройствам): AUX, COM1, COM2, COM3, COM4, LPT1, LPT2, LPT3, PRN, CON, CLOCK$, NUL.

В ОС WINDOWS каждому файлу (программе, документу, папке) ставится в соответствие пиктограмма (часто называемая иконкой или значком). Пиктограмма представляет собой небольшую картинку, которая наглядно характеризует тип данного файла. Пиктограмма отображается на первом месте в любом списке файлов и папок.

Мощным средством для работы с программами и файлами является ярлык. Ярлык представляет собой небольшую картинку, которую можно разместить в любом месте экрана. Ярлык предназначен для быстрого запуска (двойным щелчком по ярлыку) программы или открытия файла. В отличие от пиктограммы ярлык имеет маленький значок стрелки. При удалении ярлыка с объектом, на который он ссылается, ничего не происходит, он остается на своем месте.

 

2.4.3. Программы Windows

 

В составе WINDOWS есть ряд программ, обеспечивающих высокопроизводительную работу пользователя. К ним относятся: Проводник, Стандартные и Служебные программы.

Программа проводник предназначена для управления файловой системой WINDOWS и обеспечения доступа к локальным и сетевым ресурсам. ПРОВОДНИК отображает содержимое папок, позволяет открывать, копировать, перемещать, удалять, переименовывать папки и файлы, запускать на выполнение программы, выводить на экран изображение дерева папок.

Окно проводник содержит заголовок, панель меню, информационную строку и две области, каждая из которых может иметь полосы прокрутки. В нижней части окна располагается строка состояния. В правом верхнем углу имеются кнопки управления размером окна (свертывания, восстановления и закрытия). В заголовке окна указывается имя папки, просматриваемой в данный момент времени. Панель меню содержит типичный набор пунктов: Файл, Правка, Вид, Сервис и? (Справка).

Рабочее поле окна проводника разделено на две области: в левой области (все папки) отображается структура вложенности папок (иерархия папок), находящихся в памяти компьютера, в правой - содержимое папки, выделенной в левой области. Для перемещения по дереву папок можно использовать мышь, клавиши управления курсором и полосы прокрутки.

Если в папке находятся другие папки, то рядом с пиктограммой папки в левой области окна виден знак "+", расположенный внутри квадратика. Чтобы увидеть набор вложенных папок, надо один раз щелкнуть по знаку "+" (набор папок будет раскрыт в левой области окна). Щелчок по значку " - " убирает изображение папок более низкого уровня.

Папки могут содержать вложенные папки и файлы. Если один раз щелкнуть по самой папке, то в правой области окна появится список папок и файлов, находящихся в данной папке. Каждый файл снабжается пиктограммой, которая соответствует типу файла (следовательно, и расширению файла).

С помощью проводника удобно копировать и перемещать папки и файлы. Для этого, используя бегунок полосы прокрутки, надо установить дерево папок так, чтобы был виден значок папки, в которую будет производиться копирование, а в правой области должен быть виден копируемый файл. Затем надо выделить копируемый файл, щелкнув по нему кнопкой мыши, установить курсор мыши на выделенный файл, нажать кнопку мыши и, не отпуская ее, перетащить значок файла на требуемую папку. Аналогично копируется и группа файлов и папок, но при выделении надо удерживать нажатой клавишу CTRL, если надо выделить произвольную группу файлов и папок, или нажать клавишу SHIFT и щелкнуть по первому и последнему значкам, если надо выделить группу подряд расположенных папок и файлов.

 

2.4.4. Стандартные программы.

 

Программа Kodak Imaging позволяет просматривать, аннотировать и выполнять основные задачи обработки графических документов, включая факсы и отсканированные изображения.

Текстовый редактор WordPad предназначен для работы с небольшими документами. WordPad поддерживает форматирование документов с использованием различных шрифтов и стилей абзаца.

Блокнот предназначен для создания и редактирования текстовых файлов, не требующих форматирования и не превышающих по размеру 64 Кбайт. Блокнот работает только с файлами в формате "простой текст". Если файл требует форматирования текста или превышает по размеру 64 Кбайт, следует использовать текстовый редактор WordPad.

Калькулятор имеет два режима работы: обычный, предназначенный для простейших вычислений, и инженерный, который обеспечивает доступ ко многим математическим (в том числе и статистическим) функциям.

 

2.4.5. Служебные программы

Программа Агент сжатия позволяет сжимать выбранные файлы с использованием настройки, заданной пользователем. С помощью агента сжатия имеется возможность экономно использовать объем диска за счет дополнительного сжатия файлов или повысить быстродействие за счет изменения уровня сжатия файлов. После нового сжатия файлов на диске агент сжатия обновляет сведения в таблице, отражающие изменения в распределении места на диске по мере перехода от одного метода сжатия к другому.

Программа дефрагментации позволяет ускорить выполнение программ за счет перераспределения файлов и неиспользуемого объема на жестком диске.

Программа проверки диска позволяет проверить жесткий диск (дискету, файлы, папки) на наличие логических и физических ошибок. После этого поврежденные области могут быть исправлены.

Программа очистки диска позволяет освободить место на жестком диске. Эта программа проверяет диск и выводит перечень временных файлов, файлов, загружаемых из Интернета, а также ненужных программных файлов, которые не жалко удалить.

 

2.4.6. Копирование данных

В ОС WINDOWS имеются средства для копирования и перемещения данных (символов, рисунков, изображений и т.п.) между документами, подготовленными в различных приложениях и имеющих разные форматы. Преобразование информации из одного формата в другой называется конвертированием. Для передачи данных из одного документа в другой используются буфер обмена и протокол связывания и внедрения объектов (OLE2.0).

Буфер обмена это специальная область оперативной памяти, в которую можно записывать данные из различных приложений и из которой можно переносить данные в другие приложения. При записи данных в буфер обмена предыдущий набор данных стирается и на его место записывается копируемый набор данных. Данные в буфере обмена сохраняются только до выхода из ОС.

Для копирования данных в буфер обмена необходимо:

n выделить копируемые данные в документе источнике;

n активизировать команду "Копировать" меню Правка или контекстного меню (можно также использовать команду "Вырезать" меню Правка - в этом случае копируемые данные будут удалены из документа источника).

Для переноса данных из буфера обмена в другой документ необходимо:

· установить курсор в документе приемнике на то место, куда надо поместить копируемые данные;

· активизировать команду "Вставка" меню Правка или контекстного меню.

Все эти действия можно выполнить также с помощью соответствующих кнопок на панели инструментов.

Технология OLE2 позволяет реализовать два способа формирования составных документов - внедрение и связывание. При внедрении копируемый объект размещается в документе приемнике. При связывании в документе приемнике делается ссылка на копируемый объект. Достоинством этого способа является то, что размеры документа приемника практически не изменяются. Но при переносе документа приемника на другую машину надо переносить и документ источник.

Исключительные ситуации (класс Exception)

5.19.1. Что такое "исключение"

 

Все операции предусмотренные в программе контролируются операционной системой. Если ОС не может выполнить ту или иную операцию, то возникает ситуация прерывания (например, при попытке деления на ноль, попытке вычислить логарифм с отрицательным аргументом и т.п.). В результате обработки прерывания обычно программа завершается аварийно (снимается с выполнения с выдачей диагностического сообщения). Для исключения аварийного останова программы в алгоритме предусматривают средства контроля данных (проверка знаменателя перед выполнением деления и т.п.).

Ситуации, приводящие к нарушениям вычислительного процесса и требующие специальных действий по предотвращению аварийного завершения программы принято называть Исключительными ситуациями (ИС). Заметим, что ИС не обязательно связаны с прерываниями ОС. Например контроль количества циклов при решении нелинейных уравнений.

Всякое взаимодействие с операционной системой на предмет получения ресурсов — места на диске, в памяти, открытие файла — может завершиться неудачно. Любое вычисление может закончиться делением на ноль или переполнением. Дополнительный фактор возникновения исключительных ситуаций содержится в данных, к которым могут обращаться программы. Особенно это актуально в приложениях баз данных.

Платой за надежную работу программы в таких условиях служит введение многочисленных проверок, способных предотвратить некорректные действия в случае возникновения нештатной ситуации. Хорошо, если в конце очередной конструкции if..then можно просто поставить оператор Exit. Часто для корректного выхода из ситуации нужно отменить целую последовательность действий, предшествующих неудачному (например, освободить память). Все это сильно запутывает программу, маскируя четкую структуру главного алгоритма.

При разработке приложений в Delphi программист имеет возможность использовать специальный механизм, обеспечивающих обработку нештатной ситуации таким образом, чтобы программа продолжала работать, а не завершалась аварийно.

Цель обработки ИС - защищать приложения от воздействия неизбежно возникающих ошибок.

Замечание 1. Есть разница в реакции при запуске программы из Delphi и при активизации файла exe. При запуске из Delphi исключение будет сначала перехвачено средой и на экране появится сообщение на английском языке о характере и месте возникновении ошибки. например такое

Project Pro3 raised Exceptions class EdivideByZero With

message 'Division By Zero'. Project Stopped. Use Step or

Ran to continue

OK

После щелчка по OK приложение виснет. Надо нажать Ctrl+F9, появится окно с текстом Debug Session in progress

Terminate?

Надо щелкнуть по ОК и можно продолжить работу.

Другой способ – отключить перехватчик ИС отладчика. Для этого надо сбросить флажок опции Stop on Delphi Exception во вкладке Language Exception диалогового окна Debugger Options меню Tools.

Замечание 2. Если в программе надо предусмотреть проверку диапазона значений, например для данных типа диапазон, то предварительно надо установить опцию компилятора RangeChecking активной (Project / Options / окно Project Options / вкладка Compiler / RunTime errors / RangeChecking).

 

5.19.2. Исключительная ситуация как класс

Исключительная ситуация - это нештатное событие, могущее повлиять на дальнейшее выполнение программы. Для ликвидации таких ситуаций можно вводить многочисленные проверки данных и кодов возврата функций. От этого громоздкого кода можно избавиться, взяв на вооружение механизм, реализованный в Delphi.

Компилятор Delphi генерирует код, который перехватывает любое такое нештатное событие, сохраняет необходимые данные о состоянии программы, и выдает разработчику объект. С точки зрения Delphi исключительная ситуация — это объект.

Этот объект можно обработать, используя в программе специальную языковую конструкцию (try..except). Если такая конструкция не предусмотрена, все равно исключение будет обработано — в недрах VCL есть соответствующие обработчики, окружающие все потенциально опасные места.

Чем же различаются между собой исключительные ситуации? Как отличить одну исключительную ситуацию от другой? Поскольку это объекты, они отличаются классом (объектным типом). В модуле SYSUTILS.PAS описан объектный тип Exception. Он является предком для всех других объектов — исключительных ситуаций. Класс Exception имеет следующую структуру

Exception = class(TObject)

private

FMessage: string;

FHelpContext: Integer;

public

constructor Create(const Msg: string);

constructor CreateEmt(const Msg: string; const Args: array of const);

constructor CreateRes(Ident: Integer); overload;

constructor CreateRes(ResStringRec: PResStringRec); overload;

constructor CreateResFmt(Ident: Integer; const Args: array of const);

overload; constructor CreateResFmt(ResStringRec: PResStringRec; const Args: array of const);

overload;

constructor CreateHelp(const Msg: string; AHelpContext: Integer);

constructor CreateFmtHelp(const Msg: string; const Args: array of const;

AHelpContext: Integer);

constructor CreateResHelp(Ident: Integer; AHelpContext: Integer);

overload;

constructor CreateResHelp(ResStringRec: PResStringRec; AHelpContext: Integer); overload;

constructor CreateResFmtHelp(ResStringRec: PResStringRec; const Args: array of const; AHelpContext: Integer); overload;

constructor CreateResFmtHelp(Ident: Integer; const Args: array of const; AHelpContext: Integer); overload;

property HelpContext: Integer read FHelpContext write FHelpContext;

property Message: string read FMessage write FMessage;

end;

Как видно из приведенного описания класса Exception, у него имеется двенадцать конструкторов (количество конструкторов зависит от версии), позволяющих задействовать при создании объекта текстовые строки из ресурсов приложения (имя включает строку Res), форматирование текста (включает Fmt), связь с контекстом справочной системы (включает Help).

Конструкторы, в названии которых встречается подстрока Fmt, могут вставлять в формируемый текст сообщения об ошибке значения параметров, как это делает стандартная функция Format:

 

If MemSize > Limit then

raise EOutOfMemory.CreateFmt('Cannot allocate more than %d

bytes',[Limit]);

 

Если в названии присутствует подстрока Res, это означает, что текст сообщения будет загружаться из ресурсов приложения. Это особенно полезно при создании локализованных версий программных продуктов, когда нужно сменить язык всех сообщений, ничего не компилируя заново.

И наконец, если в названии фигурирует подстрока Help, то такой конструктор инициализирует свойство HelpContext создаваемого объекта. Естественно, система помощи должна быть создана и в ней должна иметься статья, связанная с этим контекстом. Теперь пользователь может затребовать помощь для данной ситуации, скажем, нажав клавишу <F1> в момент показа сообщения об ИС.

Тип Exception порождает многочисленные дочерние типы, соответствующие часто встречающимся случаям ошибок ввода/вывода, распределения памяти и т. п. На рис.1 приведен фрагмент структуры класса Exception, в котором отражены потомки связанные с ИС возникающими при обработке числовых данных.

Заметим, что тип Exception и его потомки представляют собой исключение из правила, предписывающего все объектные типы именовать с буквы Т.

Потомки Exception начинаются с Е, например EZeroDivide.

 

5.19.3. Стандартные ИС

. Ниже приведено описание этой группы исключительных ситуаций.

EAbort - “скрытое” исключение. Используется, когда надо прервать тот или иной процесс с условием, что пользователь программы не должен видеть сообщения об ошибке. Для повышения удобства использования в модуле SysUtils предусмотрена процедура Abort, определенная, как:
procedure Abort;
begin
raise EAbort.CreateRes(SOperationAborted) at ReturnAddr;
end;
EIntError - предок исключений, возникающих при выполнении целочисленных операций.

Потомки EintError.

EDivByZero Попытка деления на ноль (целое число). Вызывается в случае деления на ноль, как результат RunTime Error 200.
ERangeError Число или выражение выходит за допустимый диапазон, вызывается при попытке обращения к элементам массива по индексу, выходящему за пределы массива, как результат RunTime Error 201 при включенной директиве {$R+}.
EIntOverflow Целочисленное переполнение - вызывается при попытке выполнения операций, приводящих к переполнению целых переменных, как результат RunTime Error 215 при включенной директиве {$Q+}.

EMathError - предок исключений, случающихся при выполнении операций с плавающей точкой.

Потомки EmathError.
EInvalidOp Неверная операция - возникает, когда математическому сопроцессору передается ошибочная инструкция. Такое исключение не будет до конца обработано, пока Вы контролируете сопроцессор напрямую из ассемблерного кода.
EZeroDivide Попытка деления на ноль.

EOverflow Переполнение с плавающей точкой - возникает как результат переполнения операций с плавающей точкой при слишком больших величинах. Соответствует RunTime Error 205.
EUnderflow Исчезновение порядка - возникает как результат переполнения операций с плавающей точкой при слишком малых величинах. Соответствует RunTime Error 206.
EinvalidArgument Неверный аргумент математических функций

Самый важный отличительный признак объекта Exception — это все же класс, к которому он принадлежит. Именно факт принадлежности возникшей ИС к тому или иному классу говорит о том, что случилось. Если же нужно детализировать проблему, можно присвоить значение свойству Message. Если и этого мало, можно добавить в объект новые поля. Так, в ИС EinOutError (ошибка ввода/вывода) есть поле ErrorCode, значение которого соответствует произошедшей ошибке — запрету записи, отсутствию или повреждению файла и т. д.

Пример.

try

.FileOpenС с:\myfile.txt', fmOpenWrite);

except

on E: EinOutError do

case E.ErrorCode of

ERROR_FILE_NOT_FOUND {=2}: ShowMessage('Файл не найден!');

ERROR_ACCESS_DENIED {=5}: ShowMessage('Доступ запрещен!');

ERROR_DISK_FULL {=112}: ShowMessage ('Диск переполнен!');

end;

end;

Впрочем, ИС EInOutError возникают только тогда, когда установлена опция компилятора {$IOCHECKS ON} (или иначе {$I+}). В противном случае проверку переменной IOResult (известной еще по Turbo Pascal) нужно делать самому.

 

5.19.4. Защитные конструкции языка

Для работы с объектами исключительных ситуаций существуют специальные конструкции языка Object Pascal— блоки try…. except и try….finally. Они контролируют выполнение операторов, помещенных внутри блока до ключевого слова except или finally. В случае возникновения исключительной ситуации штатное выполнение вашей программы немедленно прекращается, и управление передается операторам, расположенным за указанными ключевыми словами. Если в вашей процедуре эти блоки отсутствуют, управление все равно будет передано ближайшему блоку, внутри которого возникла ситуация. А уж внутри VCL их предостаточно.

Хотя синтаксис двух видов блоков похож, но они принципиально отличаются назначением и решаемыми задачами.

Блок try..except применяется для реакции на конкретный тип ситуации.

Блок try...finally используется когда необходимо вернуть выделенные программе ресурсы (или нормально завершить программу – например, закрыть файлы) даже в случае аварийной ситуации.

 

5.19.5. Блок try..except

Для реакции на конкретный тип ситуации применяется блок try..except. Форма записи этого блока имеет вид

Try

Операторы

...

Except

обработчики исключений...

Else

<0ператор> {обработчик прочих ИС}

end;

Здесь try (попытка), except(исключение, else(иначе) – ключевые слова.

Выполнение блока начинается с секции try. Между try и except располагаются операторы, выполнение которых может привести к возникновению ИС. Между словами except и end располагаются обработчики исключений.

Принцип действия.

Выполняются операторы в секции try..except в обычном порядке. Если их выполнение не привело к возникновению ИС, то операторы между except и end пропускаются и далее выполняются операторы расположенные после end.

Секция except …end получает управление в случае возникновения ИС. После обработки происходит выход из защищенного блока, и управление обратно в секцию try не передается, выполняются операторы, стоящие после end.

Среда Delphi содержит много стандартных исключений, поэтому в простейшем случае в секции except …end можно просто указать процедуру вывода сообщения, как показано в примере 1.

Пример 1.

Пусть есть форма, на которой располагаются два поля Edit (для ввода значения Х и вывода У) и кнопка "выполнить". При щелчке по кнопке "Выполнить" вводится значение Х и вычисляется значение У = Z / X. В данном примере возможна ситуация "деление на ноль". Текст обработчика кнопки "выполнить" имеет вид:

procedure TForm1.Button1Click(Sender: TObject);

var

x,y,z:integer;

begin

try

z:= 100;

x:=StrToint(Edit1.Text);

y:=z div (x);

Edit2.Text:=IntToStr(y);

except

ShowMessage('деление на 0!'}

end;

end.

Здесь после except указана процедура вывода сообщения. Значит будет использоваться стандартный класс. Эта ситуация эквивалентна обычному использованию оператора if …then для контроля данных.

Достоинства. Если введем Х = 0, то появится окно с сообщением 'деление на 0!', которое мы предусматривали в программе (можно написать более подробно). Кроме того после except мы можем предусмотреть различные действия.

В этом примере замена if..then на try..except, возможно не дает очевидной экономии кода. Однако если при решении, вычислительной задачи проверять на возможное деление на ноль приходится не один, а много раз для различных переменных, то выигрыш от нового подхода неоспорим — достаточно одного блока try..except на все вычисления.

Блок try …except может содержать любое количество операторов, приводящих к различным ИС. Если обработка их отличается, то в блоке except…end используется набор директив on..do, каждая из которых определяет реакцию приложения на определенную ситуацию. Каждая директива связывает ситуацию (on...), заданную своим именем класса, с группой операторов (do...). Перевести можно так " на исключение …… выполнять.....;".

Форма записи

except
on исключение 1 do оператор1;

on исключение2 do оператор2;

............

else
оператор;

end;
После on записывается класс обработки исключения, а после do один простой или составной оператор. При этом играет роль порядок записи конструкций on... do. Если в списке конструкций on... do родительский класс предшествует дочернему, то дочерний класс никогда не получит управление.

Правило. В списке конструкций on... do дочерние классы должны предшествовать родительским классам.

Это касается и класса Eabort (он может обработать любое исключение) – ни один из стоящих после него обработчиков никогда не получит управление.

 

Неправильно правильно

on EIntError on EDivByZero

on EDivByZero on ERangeError

on ERangeError on EIntError

Пример. 2

try

i:=l;j:=0;

k:=i div j;

...

except

on EIntError do ShowMessage('IntError');

on EDivByZero do ShowMessage('DivByZero');

end;

 

В этом примере, хотя в действительности будет иметь место деление на ноль (EDivByZero), вы увидите сообщение, соответствующее родительскому классу EintError. Но стоит поменять две конструкции on..do местами, и все придет в норму.

Пример 3. Добавим в обработчик кнопки "выполнить" (см. Пример 1) переменную n типа диапазон (1..50) и оператор n:=x+20;. Кроме того в обработчик ситуации EdivByZero добавим операторы для записи нулей в поле Edit2, выделения их (Edit2.SelectAll;)и передачи этому полю фокуса (Edit2.SetFocus) при возникновении ситуации деления на ноль. Текст этой процедуры приведен ниже:

procedure TForm1.Button1Click(Sender: TObject);

var

x,y,z:integer;

n:1..50;

begin

try

z:= 100;

x:=StrToint(Edit1.Text);

y:=z div (x);

Edit2.Text:=IntToStr(y);

n:=x+20;

Edit3.Text:=IntToStr(n);

except

on ERangeError do showMessage('n вне диапазона');

on EDivByZero do begin

showMessage('деление на 0');

edit2.Text:='000';

Edit2.SetFocus;

Edit2.SelectAll;

end;

end;

end.

При возникновении ИС директивы on... do просматриваются последовательно, в порядке их описания. Каждый тип исключительной ситуации, описанный после ключевого слова on, обрабатывается именно этим блоком. Только то, что предусмотрено в нем, и будет являться реакцией на данную ситуацию.

Если возникла ситуация, не определенная ни в одной из директив, выполняются те операторы, которые стоят после else. Если и их нет, то ИС считается не обработанной и будет передана на следующий уровень обработки. Этим следующим уровнем может быть другой оператор try..except, который содержит в себе данный блок.

!!! Использовать else вместе с Try … except не рекомендуется так как оно заблокирует все ИС, в том числе и предусмотренные программистом.




Дата добавления: 2014-12-18; просмотров: 115 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.91 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав