ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.03.2025
Просмотров: 410
Скачиваний: 1
Обработка исключений выполняется блоком
try
оператор1;
. . . . . . . . . . . . . .
операторN;
except
операторА;
. . . . . . . . . . . . . . .
операторМ;
end;
Предполагаем, что исключительная ситуация может возникнуть при выполнении операторов от 1 до N. Если она не возникла, то операторы от 1 до N будут выполнены и этим выполнение заканчивается. Если возникла при их выполнении исключительная ситуация, то выполнение последовательности операторов 1N прерывается и начинается выполнение операторов от А до М. Таким образом, операторы АМ будут выполнены только при возникновении исключительной ситуации и должны обеспечить ее обработку и восстановление работоспособности программы. Покажем это на примере. Окно приложения приведено на рис. 9.1.
Рис. 9.1. Окно ввода
Окно предназначено для ввода одного числового значения, реализация кнопки Do:
procedure TForm1.Button1Click(Sender: TObject);
Var
i:integer;
begin
try
{Преобразование символьной строки в число, }
{возможна исключительная ситуация}
i:=StrToInt(Edit1.Text);
except {Начинается часть обработки исключительной ситуации}
{выдается сообщение о причине возникновения исключительной ситуации}
ShowMessage ('Вы должны ввести целое число');
Edit1.SetFocus;
{Активным становится окно Edit1 для ввода нового значения }
end;
end;
При запуске этого миниприложения из cреды Delphi обработка исключительной ситуации выполняется самой средой и на экране появится сообщение (рис. 9.2.):
Рис. 9.2. Сообщение об исключительной ситуации
Обратите внимание на последнее предложение в сообщении (Use Step or Run to continue). Если вы закроете окно сообщения и нажмете на функциональную клавишу F7 – Step (Что это за клавиша? Мы об этом говорили!), то синяя полоса появится на строке программы, которая следует за вызвавшей исключительную ситуацию строкой. Таким образом, легко определить место возникновения исключительной ситуации, а причина видна из сообщения, выданного Delphi. Что случится при нажатии на функциональную клавишу F9 – Run при наличии и отсутствии блока try except? Запустите и попробуйте!
Delphi позволяет создать законченное приложение, которое может быть запущено прямо из операционной системы. Для этого сначала необходимо запомнить файл проекта и файлы всех модулей (Как это делать, было рассмотрено выше) и создать файл с исполняемой программой (*.exe файл). Для создания *.exe файла необходимо выбрать из меню Delphi пункт Project и подпункт Build all. В результате будет создан *.exe файл с тем же именем, которое мы присвоили файлу проекта. При запуске приложения из Windows 95 и наборе неправильных символов в окне редактирования на экране появится сообщение, приведенное на рис. 9.3 и приложение будет ждать ввода нового значения.
Рис. 9.3. Пример обработки исключительной ситуации
Можно возразить, что то же самое достигается применением вместо функции StrToInt( ) процедуры val( ) и условных операторов, но это затрудняет слежение за логикой программы и при наличии большого количества преобразований заметно удлиняет программу.
В Delphi разрешены и вложенные блоки tryexcept и try finally. Предлагаем читателю самостоятельно разобраться, как будет работать приведенная ниже процедура при возникновении исключительной ситуации и без этого:
procedure TForm1.Button1Click(Sender: Tobject);
Var
i, j, k : integer;
ptr : pointer;
Begin
i:=0;
j:=0;
GetMem (ptr, 4098);
try
try
k:= j div i;
except
ShowMessage(‘Ошибка деления’);
end;
finally
FreeMem (ptr, 4098);
end;
End;
Обработка определенных исключительных ситуаций
Причина возникновения исключительных ситуаций может быть самой различной. В больших и сложных программах было бы целесообразно более точно определить причину возникновения исключительной ситуации и сообщить об этом пользователю. При запуске приложения из Delphi это делается автоматически. Обратите внимание на текст сообщения на рис. 9.2.: “Exception class EConvertError with Message ‘ ‘rtrt’ is not a valid integer value’ “. Нам сообщают, что возник класс исключения EConvertError (ошибка преобразования) и это вызвало сообщение о том, что
Поставим задачу: обеспечить определение класса исключительной ситуации и при запуске приложения из операционной системы. Некоторые классы исключительных ситуаций Delphi приведены в табл. 9.1. Полный перечень можете узнать традиционным способом.
|
Класс ИС |
Описание |
|
EBreakPoint |
В программе имеется точка прерывания |
|
EConvertError |
Ошибка преобразования (см. последний пример) |
|
EDivByZero |
Деление целого числа на нуль |
|
EInOutError |
Ошибка файлового ввода/вывода |
|
EIntOverFlow |
Переполнение целочисленного значения |
|
EInvalidCast |
Недопустимое приведение типов |
|
EInvalidOp |
Недопустимая математическая операция с плавающей точкой |
|
EOutOfMemory |
Невозможно выделить память требуемого объема |
|
EOverflow |
Переполнение значения с плавающей точкой |
|
ERangeError |
Значение за пределами диапазона допустимых значений |
|
EUnderflow |
Потеря значимости в выражении с плавающей точкой (слишком малое значение) |
|
EZeroDivide |
Деление числа с плавающей точкой на нуль |
Для иллюстрации рассмотрим простую программу с преобразованиями и вычислениями. Приложение содержит одну форму и два модуля. Для экономии места приведем лишь реализацию кнопки запуска вычислений и полностью модуль вычислений. Остальное читателю должно быть понятно из предыдущего изложения:
procedure TForm1.Button1Click(Sender: TObject);
Var
Res :real;
Rida :string;
begin
{Вызов процедуры, передача исходных данных, получение результата}
mina(Edit1.Text,Edit2.Text,Edit4.Text,res);
{Вывод результата}
rida:=FloatToStr(res);
Edit3.Text:=rida;
end;
unit mod2;
interface
procedure mina(s1,s2,s3:string; var r:real);
implementation
{Для обеспечения вызова стандартных процедур и функций}
uses SysUtils, Dialogs;
procedure mina(s1,s2,s3:string; var r:real);
Var
i,j,k :shortint;
p,q :real;
begin
{Начинается защищенная часть,}
{при выполнении возможны исключительные ситуации}
try
i:=StrToInt(s1);
j:=StrToInt(s2);
p:=StrToFloat(s3);
k:=i*j*100;
r:=sqrt(i*j);
q:=p/i;
except {Обработка исключительных ситуаций}
on EInvalidOp do ShowMessage ('Недопустимая операция');
on ERangeError do
ShowMessage ('Значение за пределами допустимых границ');
on EConvertError do ShowMessage(’Исходные данные не возможно преобразовать в числа');
on EZeroDivide do begin
ShowMessage('Деление на нуль');
q:=0;
end;
else ShowMessage ('Не удалось определить причину преры- вания');
end;
end;
end.
В приведенном примере показано программирование реакций на различные исключительные ситуации. В большинстве случаев мы ограничились выводом сообщения о ней, но в принципе возможно и преодоление ее последствий, например, присвоением значения по умолчанию (q:=0;).
Заключение
В данном учебном пособии Вы ознакомились с базовыми средствами Delphi. На самом деле Delphi большая и сложная инструментальная система программирования. Мы нарочно не стали уделять внимание некоторым тонкостям: их Вы легко можете узнать с помощью развитой системы подсказок. Часто проще не искать подробное описание той или иной конструкции, а просто “ставить эксперимент”. Рекомендуем Вам перед “экспериментами” сохранить сделанное, особенно если уже много сделано или провести “эксперименты” на отдельном приложении.
Желаем успеха в достижении мастерства в среде Delphi!
Контрольные вопросы
Что такое «Событийно-управляемая программа»?
Что понимается под визуальным программированием?
Из каких частей состоит экран инструментальной системы Delphi?
Сравнивайте между собой MDI – и SDI-приложения
Разъясните суть тестирования и отладки.
Какие средства имеются в Delphi для проведения тестирования и отладки?
Литература
Маран М.М. Объектно-ориентированное программирование. М.: МЭИ, 1997, 74 с.
Хорев П.Б. Методы разработки программных средств. М.: МЭИ, 1994, 82 с.
Архангельский А.Я. Работа с локальными базами данных в Delphi 5. М.: БИНОМ, 2000, 198 с.
Архангельский А.Я. Язык SQL в Delphi 5. М.: БИНОМ, 2000, 207 с.
Баас Р. Delphi 5. СПАРК, 2000, 496 с.
Бобровский С. Delphi 5. Учебный курс. СПб.: Питер, 2000, 638 с.
Гофман В.Э. Delphi 5. СПб.: БХВ, 2000, 800 с.
Дарахвелидзе П.Г. Программирование в Delphi 5. СПб.: БХВ, 2000, 774 с.
Жуков А.В. Изучаем Delphi. СПб.: Питер, 2001, 346 с.
Культин Н.Б. Программирование на Object Pascal в Delphi 5. СПб.: БХВ, 1999, 464 с.
Содержание
|
Введение ………………………………………………………………………... 3 |
||
|
1. |
Интегрированная среда Delphi. Принципы работы …………………… 4 |
|
|
|
1.1. |
Интегрированная среда Delphi ……………………………….. 4 |
|
|
1.2. |
Принципы визуального программирования ………………… 6 |
|
|
1.3. |
Событийно-управляемые программы ………………………11 |
|
|
1.4. |
Составление программ обработки массивов ……………… 13 |
|
|
1.5. |
Вывод на печать ………………………………………………. 15 |
|
2. |
Многодокументный и однодокументный интерфейсы (MDI и SDI) 16 |
|
|
|
2.1. |
MDI и SDI: сравнение ………………………………………… 16 |
|
|
2.2. |
Разработка MDI-приложения ………………………………… 17 |
|
|
2.2.1. |
Разработка главного и информационного окон ……………. 17 |
|
|
2.2.2. |
Использование стандартных диалоговых окон ……………. 19 |
|
|
2.2.3. |
Разработка диалогового окна ………………………………… 21 |
|
|
2.2.4. |
Управление окнами …………………………………………… 26 |
|
|
2.2.5. |
Работа с меню …………………………………………………. 28 |
|
|
2.3. |
Разработка SDI-приложения …………………………………. 30 |
|
|
2.3.1. |
Простое SDI-приложение ……………………………………. 30 |
|
|
2.3.2. |
Управление окнами в SDI-приложениях …………………... 35 |
|
3. |
Реализация алгоритмов решаемых задач на Delphi …………………. 39 |
|
|
|
3.1. |
Традиционный подход реализации алгоритмов на Delphi 39 |
|
|
3.2. |
Объектно-ориентированный подход ………………………. 40 |
|
4. |
Тестирование и отладка приложений ………………………………… 46 |
|
|
|
4.1. |
Виды ошибок …………………………………………………. 46 |
|
|
4.2. |
Отладочные средства Delphi …………………………………. 47 |
|
|
4.3. |
Составление тестов …………………………………………… 49 |
|
5. |
Решение задач обработки данных на Delphi …………………………. 52 |
|
|
|
5.1. |
Проектирование структуры файлов …………………………. 52 |
|
|
5.2. |
Связывание файлов. Проектирование базы данных ……….. 55 |
|
|
5.3. |
Реализация базы данных на Delphi ………………………….. 58 |
|
|
5.4. |
Обработка файлов ……………………………………………. 61 |
|
|
5.4.1. |
Представление данных в виде таблицы …………………….. 62 |
|
|
5.4.2. |
Представление данных в виде форм ………………………… 65 |
|
|
5.4.3. |
Совместное использование таблицы и формы …………….. 67 |
|
|
5.5. |
Внесение изменений в файл …………………………………. 69 |
|
6. |
Язык SQL и его использование в Delphi ……………………………... 71 |
|
|
|
6.1. |
Элементы языка SQL …………………………………………. 71 |
|
|
6.2. |
Использование языка SQL в Delphi ………………………….. 76 |
|
|
6.3. |
Параметры в программах на SQL ……………………………. 78 |
|
7. |
Программируемый доступ к базе данных ……………………………. 80 |
|
|
|
7.1. |
Доступ к файлам баз данных ………………………………… 80 |
|
|
7.2. |
Поиск данных в файле ……………………………………….. 83 |
|
|
7.3. |
Изменение данных в файле ………………………………….. 86 |
|
8. |
Графические возможности Delphi ……………………………………. 87 |
|
|
|
8.1. |
Графические элементы ………………………………………. 87 |
|
|
8.2. |
Рисование графиков функций ……………………………….. 88 |
|
|
8.3. |
Компоненты TPaintBox и TShape ………………………….. 89 |
|
9. |
Исключительные ситуации …………………………………………… 91 |
|
|
|
9.1. |
Обработка исключительных ситуаций ……………………… 91 |
|
|
9.2. |
Обработка определенных исключительных ситуаций 95 |
|
Заключение …………………………………………………………………… 97 |
||
|
Контрольные вопросы ……………………………………………………….. 98 |
||
|
Литература ……………………………………………………………………. 98 |
||