Событие и процедура обработки события

Тема №14. Основы языков программирование

Цель:Знакомство со средой быстрой разработки приложений Delphi. Сформировать первые сведения о языке Delphi. Выработка навыков работы в Delphi.

Задачи обучения:Формирование умений и навыков работы с интегрированной средой Delphi 7, с панелями библиотеки визуальных компонентов, с компонентами работы с текстом (Label, Edit), компонентами управления – Button, BitBtn.

Основные вопросы темы:

1. Обзор объектно-ориентированных программ.

2. Технология разработки программ.

3. Создание приложений в среде Delphi 7.

4. Компоненты работы с текстом (Label, Edit).

5. Компоненты управления – кнопки (Button, BitBtn).

Методы обучения и преподавания: выполнение типовых заданий

Теоретический блок

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

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

Несколько лет назад рядовому программисту оставалось только мечтать о создании собственных программ, работающих в среде Windows, т. к. единственным средством разработки был Borland C++ for Windows, явно ориентированный на профессионалов, обладающих серьезными знаниями и опытом.

Бурное развитие вычислительной техники, потребность в эффективных средствах разработки программного обеспечения привели к появлению систем программирования, ориентированных на так называемую "быструю разработку", среди которых можно выделить Borland Delphi и Microsoft Visual Basic. В основе систем быстрой разработки (RAD-систем, Rapid Application Development - среда быстрой разработки приложений) лежит технология визуального проектирования и событийного программирования, суть которой заключается в том, что среда разработки берет на себя большую часть рутинной работы, оставляя программисту работу по конструированию диалоговых окон и функций обработки событий. Производительность программиста при использовании RAD-систем - фантастическая!

Delphi - это среда быстрой разработки, в которой в качестве языка программирования используется язык Delphi. Язык Delphi - строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal.

Начало работы

Запускается Delphi обычным образом, т.е. выбором из меню Borland Delphi 7 команды Delphi 7.

Вид экрана после запуска Delphi несколько необычен (рис.22.1). Вместо одного окна на экране появляются пять:

1. главное окно - Delphi 7;

2. окно стартовой формы - Form1;

3. окно редактора свойств объектов - Инспектор объектов (Object Inspector);

4. окно просмотра списка объектов - Дерево объектов (Object TreeView);

5. окно редактора кода - Unit1.pas.

Окно редактора кода почти полностью закрыто окном стартовой формы.

В главном окне находятся меню команд, панели инструментов и палитра компонентов.

Окно стартовой формы (Form1)представляет собой заготовку главного окна разрабатываемого приложения.

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

Окно Инспектор объектов (Object Inspector) - окно редактора свойств объектов предназначено для редактирования значений свойств объектов. В терминологии визуального проектирования объекты - это диалоговые окна и элементы управления (поля ввода и вывода, командные кнопки, переключатели и др.). Свойства объекта - это характеристики, определяющие вид, положение и поведение объекта. Например, свойства Width и Height задают размер (ширину и высоту) формы, свойства Tор и Left положение формы на экране, свойство Caption - текст заголовка.

В окне редактора кода, которое можно увидеть, отодвинув в сторону окно формы, следует набирать текст программы. В начале работы над новым проектом это окно редактора кода содержит сформированный Delphi шаблон программы.

Компоненты

Наиболее часто используемые компоненты находятся на вкладке Стандартные (Standard).

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

 
 

Вкладка Стандартные(Standard)содержит наиболее часто используемые компоненты

 

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

Каждому компоненту Delphi присваивает имя, которое состоит из названия компонента и его порядкового номера. Например, если к форме добавить два компонента Edit, то их имена будут Edit1 и Edit2. Программист путем изменения значения свойства Name может изменить имя компонента. В простых программах имена компонентов, как правило, не изменяют.

В таблице 22.1 перечислены основные свойства компонента Edit - поля ввода-редактирования.

Таблица 22.1. Свойства компонента Edit (поле ввода-редактирования)

Свойство Описание
Name Имя компонента. Используется в программе для доступа к компоненту и его свойствам, в частности - для доступа к тексту, введенному в поле редактирования
Text Текст, находящийся в поле ввода и редактирования
Left Расстояние от левой границы компонента до левой границы формы
Top Расстояние от верхней границы компонента до верхней границы формы
Height Высота поля
Width Ширина поля
Font Шрифт, используемый для отображения вводимого текста
ParentFont Признак наследования компонентом характеристик шрифта формы, на которой находится компонент. Если значение свойства равно True, то при изменении свойства Font формы автоматически меняется значение свойства Font компонента

Delphi позволяет изменить размер и положение компонента при помощи мыши.

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

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

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


 

Помимо полей редактирования в окне программы должна находиться краткая информация о программе и назначении полей ввода. Для вывода текста в форму используют поля вывода текста. Поле вывода текста (поле статического текста) - это компонент Label. Значок компонента Label находится на вкладке Стандартные(Standard). Добавляется компонент Label в форму точно так же, как и поле редактирования.

Свойства компонента Label перечислены в таблице 22.2.

 

Таблица 22.2. Свойства компонента Label (поле вывода текста)

Свойство Описание
Name Имя компонента. Используется в программе для доступа к компоненту и его свойствам
Caption Отображаемый текст
Font Шрифт, используемый для отображения текста
ParentFont Признак наследования компонентом характеристик шрифта формы, на которой находится компонент. Если значение свойства равно True, текст выводится шрифтом, установленным для формы
AutoSize Признак того, что размер поля определяется его содержимым
Left Расстояние от левой границы поля вывода до левой границы формы
Top Расстояние от верхней границы поля вывода до верхней границы формы
Height Высота поля вывода
Width Ширина поля вывода
Wordwrap Признак того, что слова, которые не помещаются в текущей строке, автоматически переносятся на следующую строку

 

Следует обратить внимание на свойства Autosize и Wordwrap. Эти свойства нужно использовать, если поле вывода должно содержать несколько строк текста. После добавления к форме компонента Label значение свойства Autosize равно True, т.е. размер поля определяется автоматически в процессе изменения значения свойства Сaption. Если вы хотите, чтобы находящийся в поле вывода текст занимал несколько строк, то надо сразу после добавления к форме компонента Label присвоить свойству Autosize значение False, свойству Wordwrap - значение True. Затем изменением значений свойств Width и Height нужно задать требуемый размер поля. Только после этого можно ввести в свойство Сaption текст, который должен быть выведен в поле.

Командная кнопка, компонент Button, добавляется в форму точно так же, как и другие компоненты. Значок компонента Button находится на вкладке Стандартные(Standard). Свойства компонента приведены в таблице 22.3.

Таблица 22.3. Свойства компонента Button (командная кнопка)

Свойство Описание
Name Имя компонента. Используется в программе для доступа к компоненту и его свойствам
Caption Текст на кнопке
Enabled Признак доступности кнопки. Кнопка доступна, если значение свойства равно True, и недоступна, если значение свойства равно False
Left Расстояние от левой границы кнопки до левой границы формы
Top Расстояние от верхней границы кнопки до верхней границы формы
Height Высота кнопки
Width Ширина кнопки

 

Компонент TBitBtn (Кнопка с картинкой) предназначен для создания кнопки с картинкой. В системе имеется набор готовых шаблонов.

Изображение помещаемое на кнопку задается в свойстве Glyph (Значок). При этом вызывается нужная картинка (в формате .BMP). Большой набор готовых картинок для кнопок можно найти в каталоге Borland Shared (подкаталог Images/Buttons), который автоматически создается вместе с основным программным каталогом системы Delphi 7.

Каждая такая картинка может состоять из 1-4 частей, равных по ширине. Первая часть – изображение кнопки в обычном состоянии, вторая – изображение «отключенной» недоступной кнопки (свойство Enabled имеет значение False), третья – изображение на кнопке после щелчка мыши, четвертая – изображение на «нажатой» кнопке. Число составных частей изображения задается в свойстве NumGlyphs (от 1 до 4). Расстояние от картинки до границ кнопки (в пикселях) можно указать в свойстве Margin.

В свойстве Kind задается реакция кнопки на щелчок. Некоторые стандартные действия можно реализовать без дополнительного программирования. Соответствующие значения свойства Kind приведены в таблице 22.4.

Таблица 22.4. Значения свойства Kind

Значение Действие
bkCustom Реакция кнопки определена программистом
bkOK Закрытие формы стандартным действием. В свойство ModalResult записывается значение mrOK
bkCancel Закрытие формы с отказом от изменений. В свойство ModalResult записывается значение mrCancel
bkYes Подтверждение изменений. В свойство ModalResult записывается значение mrYes
bkNo Отказ от изменений. В свойство ModalResult записывается значение mrNo
bkHelp Вызов раздела справочной системы в соответствии со значением, записанным в свойство HelpContext
bkClose Закрытие формы
bkAbort Прерывание. Форма не закрывается
bkRetry Повтор попытки
bkIgnore Игнорирование возникшей ситуации
bkAll Подтверждение всех изменений

 

Для каждого из видов кнопки, за исключением bkCustom, в системе Delphi7 имеется особая картинка.

С помощью свойства Layout можно указать расположение картинки по отношению к тексту (заголовку) кнопки. Возможные значения указаны в таблице 22.5.

 

Таблица 22.5. Значения свойства Layout

Значение Расположение
blGlyphLeft Слева
blGlyphRight Справа
blGlyphTop Вверху
blGlyphBottom Внизу

 

Расстояние между картинкой и текстом (в пикселях) задается в свойстве Spacing. У класса TBitBtnимеется новый метод Click, который моделирует щелчок на кнопке. Он используется, когда надо закрыть форму одним из стандартных способов.

Завершив работу по созданию формы приложения, можно приступить к написанию текста программы. Но перед этим обсудим очень важные при программировании в Windows понятия:

1. событие;

2. процедура обработки события.

Событие и процедура обработки события

Щелчок на изображении командной кнопки - это пример того, что в Windows называется событием.

Событие (Event) - это то, что происходит во время работы программы. В Delphi каждому событию присвоено имя. Например, щелчок кнопкой мыши - это событие OnClick, двойной щелчок мышью событие OnDblClick.

В таблице 22.6 приведены некоторые события Windows.

Таблица 22.6. События

Событие Происходит
OnClick При щелчке кнопкой мыши
OnDblClick При двойном щелчке кнопкой мыши
OnMouseDown При нажатии кнопки мыши
OnMouseUp При отпускании кнопки мыши
OnMouseMove При перемещении мыши
OnKeyPress При нажатии клавиши клавиатуры
OnKeyDown При нажатии клавиши клавиатуры. События OnKeyDown и OnKeyPress — это чередующиеся, повторяющиеся события, которые происходят до тех пор, пока не будет отпущена удерживаемая клавиша (в этот момент происходит событие OnKeyUp)
OnKeyUp При отпускании нажатой клавиши клавиатуры
OnCreate При создании объекта (формы, элемента управления). Процедура обработки этого события обычно используется для инициализации переменных, выполнения подготовительных действий
OnPaint При появлении окна на экране в начале работы программы, после появления части окна, которая, например, была закрыта другим окном, и в других случаях
OnEnter При получении элементом управления фокуса
OnExit При потере элементом управления фокуса

 

Реакцией на событие должно быть какое-либо действие. В Delphi реакция на событие реализуется как процедура обработки события. Таким образом, для того чтобы программа выполняла некоторую работу в ответ на действия пользователя, программист должен написать процедуру обработки соответствующего события. Следует обратить внимание на то, что значительную часть обработки событий берет на себя компонент. Поэтому программист должен разрабатывать процедуру обработки события только в том случае, если реакция на событие отличается от стандартной или не определена. Например, если по условию задачи ограничений на символы, вводимые в поле Edit, нет, то процедуру обработки события OnKeyPress писать не надо, т. к. во время работы программы будет использована стандартная (скрытая от программиста) процедура обработки этого события.

Чтобы приступить к созданию процедуры обработки события, надо сначала в окне Инспектора объектов (Object Inspector)выбрать компонент, для которого создается процедура обработки события. Затем в этом же окне нужно выбрать вкладку События (Events).

В левой колонке вкладки События (Events)перечислены имена событий, которые может воспринимать выбранный компонент (объект). Если для события определена (написана) процедура обработки события, то в правой колонке рядом с именем события выводится имя этой процедуры.

Для того чтобы создать функцию обработки события, нужно сделать двойной щелчок мышью в поле имени процедуры обработки соответствующего события. В результате этого откроется окно редактора кода, в которое будет добавлен шаблон процедуры обработки события, а в окне Инспектора объектов(Object Inspector)рядом с именем события появится имя функции его обработки (рис.22.2).

Delphi присваивает функции обработки события имя, которое состоит из двух частей. Первая часть имени идентифицирует форму, содержащую объект (компонент), для которого создана процедура обработки события. Вторая часть имени идентифицирует сам объект и событие. В нашем примере имя формы - Form1, имя командной кнопки – Button1, а имя события – Click (рис.22.3).

В окне редактора кода между словами begin и end можно печатать инструкции, реализующие функцию обработки события.

В процессе разработки программы часто возникает необходимость переключения между окном редактора кода и окном формы. Сделать это можно при помощи командной кнопки Переключение Форма/Модуль (Toglle Form/Unit),находящейся на панели инструментов Вид(View), или нажав клавишу <F12>.

Рисунок 22.2. Вкладка События (Events) окна Инспектора объектов (ObjectInspector)

 
 
Рисунок 22.3. Окно редактора кода


Справочная система

В процессе набора программы можно получить справку, например, о конструкции языка или функции. Для этого нужно в окне редактора кода набрать слово (инструкцию языка программирования, имя процедуры или функции и т. д.), о котором надо получить справку, и нажать клавишу <F1>.

Справочную информацию можно получить, выбрав из меню Помощь (Help)команду Delphi Help.В этом случае на экране появится стандартное окно справочной системы. В этом окне на вкладке Предметный указательнужно ввести ключевое слово, определяющее тему, по которой нужна справка. Как правило, в качестве ключевого слова используют первые несколько букв имени функции, процедуры, свойства или метода.

Структура проекта

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

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

Начинается главный модуль словом Рrogram, за которым следует имя программы, совпадающее с именем проекта. Имя проекта задается в момент сохранения проекта, и оно определяет имя создаваемого компилятором исполняемого файла программы. Далее за словом uses следуют имена используемых модулей: библиотечного модуля Forms и модуля формы Unit1.pas.

Строка {$R *.RES}, которая похожа на комментарий, — это директива компилятору подключить файл ресурсов. Файл ресурсов содержит ресурсы приложения: пиктограммы, курсоры, битовые образы и др. Звездочка показывает, что имя файла ресурсов такое же, как и у файла проекта, но с расширением res.

Файл ресурсов не является текстовым файлом, поэтому просмотреть его с помощью редактора текста нельзя. Для работы с файлами ресурсов используют специальные программы, например, Resource Workshop. Можно также применять входящую в состав Delphi утилиту Image Editor, доступ к которой можно получить выбором из меню Сервис (Tools)команды Image Editor.

Исполняемая часть главного модуля находится между инструкциями begin и end. Инструкции исполняемой части обеспечивают инициализацию приложения и вывод на экран стартового окна.

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

Начинается модуль словом unit, за которым следует имя модуля.

Модуль состоит из следующих разделов:

1. интерфейса;

2. реализации;

3. инициализации.

Раздел интерфейса (начинается словом interface) сообщает компилятору, какая часть модуля является доступной для других модулей программы. В этом разделе перечислены (после слова uses) библиотечные модули, используемые данным модулем. Также здесь находится сформированное Delphi описание формы, которое следует за словом type.

Раздел реализации открывается словом implementation и содержит объявления локальных переменных, процедур и функций, поддерживающих работу формы.

Начинается раздел реализации директивой {$R *.DFM}, указывающей компилятору, что в процессе генерации выполняемого файла надо использовать описание формы. Описание формы находится в файле с расширением dfm, имя которого совпадает с именем модуля. Файл описания формы генерируется средой Delphi на основе внешнего вида формы.

За директивой ($R *.DFM} следуют процедуры обработки событий для формы и ее компонентов. Сюда же программист может поместить другие процедуры и функции.

Раздел инициализации позволяет выполнить инициализацию переменных модуля. Инструкции раздела инициализации располагаются после раздела реализации (описания всех процедур и функций) между begin и end. Если раздел инициализации не содержит инструкций, то слово begin не указывается.

Следует отметить, что значительное количество инструкций модуля формирует Delphi. Например, Delphi, анализируя действия программиста по созданию формы, генерирует описание класса формы (после слова type).

Сохранение проекта

Проект - это набор файлов, используя которые компилятор создает исполняемый файл программы (ЕХЕ-файл). В простейшем случае проект состоит из файла описания проекта (DOF-файл), файла главного модуля (DPR-файл), файла ресурсов (RES-файл), файла описания формы (DFM-файл), файла модуля формы, в котором находятся основной код приложения, в том числе функции обработки событий на компонентах формы (PAS-файл), файл конфигурации (CFG-файл).

Чтобы сохранить проект, нужно из меню Файл (File)выбрать команду Сохранить проект как… (Save Project As…). Если проект еще ни разу не был сохранен, то Delphi сначала предложит сохранить модуль (содержимое окна редактора кода), поэтому на экране появится окно Save Unit1 As. В этом окне надо выбрать папку, предназначенную для файлов проекта, и ввести имя модуля. После нажатия кнопки Сохранить,появляется следующее окно, в котором необходимо ввести имя файла проекта.

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

 

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

Компиляция

Компиляция - это процесс преобразования исходной программы в исполняемую. Процесс компиляции состоит из двух этапов. На первом этапе выполняется проверка текста программы на отсутствие ошибок, на втором - генерируется исполняемая программа (ехе-файл).

После ввода текста функции обработки события и сохранения проекта можно из меню Проект (Project)выбрать команду Компилировать Project (Compile)и выполнить компиляцию (рис.22.4). Процесс и результат компиляции отражаются в диалоговом окне Compiling. В это окно компилятор выводит ошибки (Errors), предупреждения (Warnings) и подсказки (Hints). Сами сообщения об ошибках, предупреждения и подсказки отображаются в нижней части окна редактора кода.

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

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

 

Запуск программы

Пробный запуск программы можно выполнить непосредственно из Delphi, не завершая работу со средой разработки. Для этого нужно из меню Выполнить (Run)выбрать команду Выполнить (Run)или щелкнуть на соответствующей кнопке панели инструментов Отладка (Debug).

Запуск программы из среды разработки

Глоссарий

 

На русском языке На казахском языке English
Файл Проекта Жоба Файлы (Project File)
Файл Ресурсов Ресурстар файлы (Resource File)
Конструктор растырушы (Constructor)
Класс(Классовый Тип) Класс Class
Компонент Компонент Component
Инспектор Объектов Объектілер Инспекторы (Object Inspector)
Программа Программа Program
Метод діс (Method)
Модуль Модуль (Unit)
Наследование Мрагерлік (Inheritance)
Объект Объект (Нысан) (Object)
Палитра Компонентов Компоненттер Палитрасы (Component Palette)
Поле ріс (Field)
Приложения осымша (Application)
Свойства асиеттер (Property)
Тип Времени Выполнения Іске осу уаытыны типі (Run-Time Type)
Форма Форма (Form)
Интерфейс Интерфейс(Пайдалану Блімі) Іinterface
Компилирование Компиляциялау Compiling
Оператор Орератор Operator
Процедура Процедура(программа ішіндегі бір блігі/ішкі программа )   Рrocedure
Частный Жеке,дербес Private
Выполнение (Реализовать) Іске асыру, орындау Impelementation
Проект Жоба Project
Событие Оиа Event

 

Литература:

1. С. И. Бобровский. Учебный курс Delphi7. Питер, 2006г.

2. Г.Г. Рапаков, С.Ю. Ржеуцкая. Программирование на языке Паскаль. Санкт-Петербург, 2005 г.

3. Н.Культин. Учебный курс Delphi Санкт-Петербург, 2005 г.

4. Н.Культин. Delphi в задачах и примерах. Санкт-Петербург, 2005 г.

5. Е.Р. Алексеев, О.В. Чесноков. Шаг за шагом. Москва, 2005 г.

Контроль

Вопросы:

1. Как запускается Delphi?

2. Сколько окон появляются после загрузки интерфейса Delphi?

3. Для чего предназначено окно ObjectTreeView?

4. Для чего предназначено окно ObjectInspector?

5. Как можно определить, в каком режиме открыт проект?

6. Что представляет собой окно стартовой формы?

7. Что такое объект?

8. Как задают размер компонента?

9. Как изменяют положение компонента на форме?

10. Что такое событие?

11. Как получить справку в процессе разработки программы?

12. Как сохраняют проект?

13. Что такое компиляция и как ее выполнить?

14. С помощью какой кнопки запускают программу из среды разработки?

15. Для чего используются свойства Autosize и Wordwrap компонента Label?