Студопедия

КАТЕГОРИИ:

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

Указания к выполнению работы




 

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

 

procedure val(S; var V; var Code:integer);

 

Функция конвертирует строковое значение S в число V. Для её использования необходимо предварительно объявить переменную V, которая может быть как целочисленного типа, так и вещественного, а также переменную Code, в которой возвращается позиция ошибочного символа в S – или 0, если в S находится корректно заданное число. Таким образом, чтобы определить, находится ли в поле ввода корректное число, нужно воспользоваться функцией val и проверить, содержится ли в переменной Code нулевое значение. Если нет, то можно, например, вернуть фокус в поле (с помощью метода SetFocus поля редактирования) и вывести сообщение, к примеру:

 

MessageDlg(‘В поле введено нечисловое значение!‘,mtError,[mbOK],0);

 

Функция MessageDlg выводит сообщение в окошке с пиктограммой (в данном случае – с пиктограммой ошибки); простейшее же сообщение можно вывести с помощью процедуры ShowMessage, единственный параметр которой задаёт выводимый текст. Однако наиболее продвинутые возможности предоставляет функция MessageBox глобального объекта Application класса TApplication, который также позволяет получить доступ к ряду полезных возможностей созданного приложения в целом (в отличие от классов отдельных форм, например). При использовании функции MessageBox можно указать не только пиктограмму для выводимого сообщения, но и строчку, которая будет выведена в заголовке соответствующей формы. К примеру:

 

Application.MessageBox(‘В поле введено нечисловое значение!’,

‘Ошибочный ввод’, MB_ICONSTOP);

 

Во-вторых, можно обработать исключительную ситуацию, возникшую при попытке конвертирования строки в число. Обработка исключений – универсальный способ выявления и реакции на ошибочные ситуации в программе. Программный код, в котором возможна исключительная ситуация, помещается в блок tryexcept, например:

 

Try

StrToInt(Edit1.Text);

Except

on E:EConvertError do

ShowMessage(‘Класс ошибки: ’+E.ClassName+‘, сообщение: ‘+E.Message);

end;

 

В данном случае перед названием класса исключительной ситуации EConvertError указан идентификатор, представляющий объект-исключение. Он действует только в пределах блока обработки исключения и позволяет получить некоторые характеристики исключительной ситуации. Однако его использование необязательно, равно как и конструкции ondo (можно сразу обрабатывать исключение после слова except, не анализируя класс исключительной ситуации). Однако зачастую ошибочный ввод проще и удобнее предотвратить, просто не позволив пользователю ввести неверный символ. Для этого используется событие поля редактирования OnKeyPress, возникающее при нажатии клавиши клавиатуры. К примеру:

 

begin

if not (Key in [‘0’..‘9’,#8]) then

Begin

Key:=#0;

beep

end;

end;

 

Если очередной вводимый символ – не цифра, то его ввод подавляется и выводится звуковой сигнал. Наконец, вместо простого компонента Edit может быть использован компонент MaskEdit, который предоставляет возможность форматированного (маскированного) ввода. Маска описывается в свойстве EditMask, которое имеет в Object Inspector встроенный редактор с заготовками наиболее распространённых масок. Дополнительную информацию о значении символов масок и её формате можно получить в разделе справочной системы Delphi, сопоставленном свойству EditMask. Нарушение ограничений, накладываемых маской (к сожалению, она не гарантирует ввода правильного значения: например, для числового формата возможен ввод пустых позиций внутри числа), приводит генерации исключения EDBEditError при попытке выхода из поля. При этом выдаётся стандартное английское сообщение, что едва ли приемлемо. Возможностей «русифицировать» его немного, поскольку размещать блок try … except некуда. Единственный правильный способ – это перехват всех исключений и распознавание нужного. Для этого существуют два альтернативных способа. Во-первых, можно задать обработчик OnException объекта Application. При этом стандартный обработчик замещается вашим собственным. К примеру:

 

procedure TForm1.MyException(Sender:TObject; E:Exception);

Begin

if (E.ClassName='EDBEditError') AND (...) then

...

end;

procedure TForm1.FormCreate(Sender:TObject);

Begin

Application.OnException:=MyException;

end;

 

Во-вторых, более простым способом является применение невизуального компонента ApplicationEvents и его событие OnException, которое используется аналогично.

 

Контрольные вопросы и задания

 

1. Что такое "исключительная ситуация"?

2. На каких ключевых словах строится механизм обработки исключений?

3. Как строится программная конструкция на основе этих ключевых слов?

4. В обработчики каких событий вводятся эти конструкции?

5. Какой способ введения в программу конструкции обработки исключительной ситуации является наиболее корректным и удобным? Почему?

 

 

Лабораторная работа №10 (2 часа)

 

Технология создания динамических библиотек (DLL)

Цель: освоить технологию создания и использования библиотек динамической компоновки в Delphi.

Оборудование: ПЭВМ IBM PC-AT.

Программные средства: ОС семейства Windows, среда Delphi 5.* (или выше).

 

Задание

1. Спроектировать исходный текст DLL-библиотеки, содержащий 2-3 процедуры для вызова внешними программами.

2. Создать интерфейсный модуль для работы с DLL.

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

 

Программа работы

 

1. Изучить назначение и приёмы использования библиотек динамической компоновки.

2. Написать исходный код DLL.

3. Написать исходный код интерфейсного модуля DLL.

4. Написать исходный код программы, импортирующей функции DLL.

5. Выявить и исправить ошибки в модулях.

6. Расставить по тексту модулей комментарии.

7. Откомпилировать исходные коды DLL и импортирующей программы.

 

Пояснения к работе

Библиотеки динамической компоновки или просто DLL (Dynamic Link Libraries) можно определить как наборы подпрограмм, которые могут вызываться приложениями и другими DLL. Они представляют собой мощный механизм, позволяющий ядру Windows, наряду с гибким управлением памятью, использовать минимальный объём памяти для выполнения программ.

С одной стороны, модуль DLL содержит доступные ресурсы или исполняемый код. Но, с другой стороны, DLL – это отдельно компилируемая и выполняемая программа, которая связана во время выполнения с программами, использующими её.

Чтобы отличать DLL от автономно выполняемых программ, эти файлы именуются с расширением .DLL.

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

Лабораторная работа выполняется в три этапа:

1. Проектирование исходного текста будущей динамической библиотеки.

2. Подготовка интерфейсного модуля для работы с ней.

3. Создание демонстрационного проекта с вызовом процедур из DLL.

 










Последнее изменение этой страницы: 2018-05-27; просмотров: 175.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...