Событие и процедура обработки события
Работа в среде Delphi
Запускается Delphi обычным образом, т. е. выбором из меню Borland Delphi7 команды Delphi7 (рис. В6).
Рис. В6. Запуск Delphi
Вид экрана после запуска Delphi несколько необычен (рис. В7). Вместо одного окна на экране появляются пять:
- главное окно — Delphi 7;
- окно стартовой формы — Form 1;
- окно редактора свойств объектов — Object Inspector;
- окно просмотра списка объектов — Object TreeView;
- окно редактора кода — Unitl.pas.
Окно редактора кода почти полностью закрыто окном стартовой формы.
Рис. В7. Вид экрана после запуска Delphi
В главном окне (рис. В8) находится меню команд, панели инструментов и палитра компонентов.
Окно стартовой формы (Form1)представляет собой заготовку главного окна разрабатываемого приложения.
Программное обеспечение принято делить на системное и прикладное. Системное программное обеспечение — это все то, что составляет операционную систему. Остальные программы принято считать прикладными. Для краткости прикладные программы называют приложениями.
Рис. В8. Главное окно
Окно Object Inspector(рис. В9) — окно редактора свойств объектов предназначено для редактирования значений свойств объектов. В терминологии визуального проектирования объекты — это диалоговые окна и элементы управления (поля ввода и вывода, командные кнопки, переключатели и др.). Свойства объекта — это характеристики, определяющие вид, положение и поведение объекта. Например, свойства width и Height задают размер (ширину и высоту) формы, свойства тор и Left — положение формы на экране, свойство caption — текст заголовка.
Рис. В9. На вкладке Propertiesперечислены свойства объекта и указаны их значения
Рис. В10. Окно редактора кода
В окне редактора кода (рис. В10), которое можно увидеть, отодвинув в сторону окно формы, следует набирать текст программы. В начале работы над новым проектом это окно редактора кода содержит сформированный Delphi шаблон программы.
Первый проект
Для демонстрации возможностей Delphi и технологии визуального проектирования разработаем приложение, используя которое, можно вычислить скорость, с которой спортсмен пробежал дистанцию. Вид окна программы во время ее работы приведен на рис. В11.
Рис. В11. Окно программы вычисления скорости бега
Для начала работы над новой программой запустите Delphi. Если вы уже работаете в среде разработки и у вас загружен другой проект, выберите в меню File(Файл) командуNew | Application(Создать | Приложение).
Форма
Работа над новым проектом, так в Delphi называется разрабатываемое приложение, начинается с создания стартовой формы. Так на этапе разработки программы называют диалоговые окна.
Стартовая форма создается путем изменения значений свойств формы Form1и добавления к форме необходимых компонентов (полей ввода и вывода текста, командных кнопок).
Свойства формы (табл. В1) определяют ее внешний вид: размер, положение на экране, текст заголовка, вид рамки.
Для просмотра и изменения значений свойств формы и ее компонентов используется окно Object Inspector.В верхней части окна Object Inspectorуказано имя объекта, значения свойств которого отображается в данный момент. В левой колонке вкладки Properties(Свойства) перечислены свойства объекта, а в правой — указаны их значения.
Таблица В1. Свойства формы (объекта т form)
Свойство | Описание | ||
Name | Имя формы. В программе имя формы используется для управления формой и доступа к компонентам формы | ||
Caption | Текст заголовка | ||
Width | Ширина формы | ||
Height | Высота формы | ||
Top | Расстояние от верхней границы формы до верхней границы экрана | ||
Left | Расстояние от левой границы формы до левой границы экрана | ||
BorderStyle | Вид границы. Граница может быть обычной (bsSizeable), тонкой (bs Single) или отсутствовать (bsNone). Если у окна обычная граница, то во время работы программы пользователь может при помощи мыши изменить размер окна. Изменить размер окна с тонкой границей нельзя. Если граница отсутствует, то на экран во время работы программы будет выведено окно без заголовка. Положение и размер такого окна-во время работы программы изменить нельзя | ||
Свойство | Описание | ||
Borderlcons Icon Color Font | Кнопки управления окном. Значение свойства определяет, какие кнопки управления окном будут доступны пользователю во время работы программы. Значение свойства задается путем присвоения значений уточняющим свойствам biSystemMenu, biMinimaze, biMaximaze И biHelp. Свойство biSystemMenu определяет доступность кнопки Свернуть и кнопки системного меню, biMinimaze— кнопки Свернуть, biMaximaze— кнопки Развернуть, biHelp — кнопки вывода справочной информации Значок в заголовке диалогового окна, обозначающий кнопку вывода системного меню Цвет фона. Цвет можно задать, указав название цвета или привязку к текущей цветовой схеме операционной системы. Во втором случае цвет определяется текущей цветовой схемой, выбранным компонентом привязки и меняется при изменении цветовой схемы операционной системы Шрифт. Шрифт, используемый "по умолчанию" компонентами, находящимися на поверхности формы. Изменение свойства Font формы приводит к автоматическому изменению свойства Font компонента, располагающегося на поверхности формы. То есть компоненты наследуют свойство Font от формы (имеется возможность запретить наследование) | ||
При создании формы в первую очередь следует изменить значение свойства caption (Заголовок). В нашем примере надо заменить текст Form1 на "скорость бега". Чтобы это сделать, нужно в окне Object Inspectorщелкнуть мышью на строке Caption, в результате чего будет выделено текущее значение свойства, в строке появится курсор, и можно будет ввести текст "скорость бега" (рис. В12).
Аналогичным образом можно установить значения свойств Height и width, которые определяют высоту и ширину формы. Размер формы и ее положение на экране, а также размер других элементов управления и их положение на поверхности формы задают в пикселах, т. е. точках экрана. Свойствам Height и width надо присвоить значения 250 и 330 соответственно.
Форма — это обычное окно. Поэтому его размер можно изменить точно так же, как размер любого другого окна, т. е. захватом и перемещением (с помощью мыши) границы. По окончании перемещения границ автоматически изменятся значения свойств Height и width. Они будут соответствовать установленному размеру формы.
Рис. В12. Установка значения свойства путем ввода значения
Положение диалогового окна на экране после запуска программы соответствует положению формы во время ее разработки, которое определяется значением свойств тор (отступ от верхней границы экрана) и Left (отступ от левой границы экрана). Значения этих свойств также можно задать путем перемещения окна формы при помощи мыши.
При выборе некоторых свойств, например, Borderstyle, справа от текущего значения свойства появляется значок раскрывающегося списка. Очевидно, что значение таких свойств можно задать путем выбора из списка (рис. В13).
Некоторые свойства являются сложными, т. е. их значение определяется совокупностью значений других (уточняющих) свойств. Перед именами сложных свойств стоит значок "+", при щелчке на котором раскрывается список уточняющих свойств (рис. В14). Например, свойство BorderIcons определяет, какие кнопки управления окном будут доступны во время работы программы. Так, если свойству biMaximize присвоить значение False, то во время работы программы кнопки Развернутьв заголовке окна не будет.
Рис. В13. Установка значения свойства путем выбора из списка
Рис. В14. Раскрытый список вложенных свойств сложного свойства BorderIcons
Рядом со значениями некоторых свойств отображается командная кнопка с тремя точками. Это значит, что для задания значения свойства можно воспользоваться дополнительным диалоговым окном. Например, значение сложного свойства Font можно задать путем непосредственного ввода значений уточняющих свойств, а можно воспользоваться стандартным диалоговым окном выбора шрифта.
В табл. В2 перечислены свойства формы разрабатываемой программы, которые следует изменить. Остальные свойства оставлены без изменения и в таблице не приведены.
Таблица В2. Значения свойств стартовой формы
Свойство | Значение | ||
Caption | Скорость бега | ||
Height | |||
Width | |||
BorderStyle | bsSingle | ||
Свойство | Значение | ||
BorderIcons . biMinimize | False | ||
BorderIcons . biMaximize | False | ||
Font. Size | |||
В приведенной таблице в именах некоторых свойств есть точка. Это значит, что надо задать значение уточняющего свойства. После того как будут установлены значения свойств главной формы, она должна иметь вид, приведенный на рис. В15.
Рис. В15. Так выглядит форма после установки значений свойств
Компоненты
Программа вычисления скорости бега должна получить от пользователя исходные данные — длину дистанции и время, за которое спортсмен пробежал дистанцию. В подобных программах данные с клавиатуры, как правило, вводят в поля редактирования. Поэтому в форму надо добавить компонент Edit — поле редактирования.
Наиболее часто используемые компоненты находятся на вкладке Standard(рис. В16).
Для того чтобы добавить в форму компонент, необходимо в палитре компонентов выбрать этот компонент, щелкнув левой кнопкой мыши на его пиктограмме, далее установить курсор в ту точку формы, в которой должен быть левый верхний угол компонента, и еще раз щелкнуть левой кнопкой мыши. В результате в форме появляется компонент стандартного размера.
Рис. В16. Вкладка Standardсодержит наиболее часто используемые компоненты
Размер компонента можно задать в процессе его добавления к форме. Для этого надо после выбора компонента из палитры поместить курсор мыши в ту точку формы, где должен находиться левый верхний угол компонента, нажать левую кнопку мыши и, удерживая ее нажатой, переместить курсор в точку, где должен находиться правый нижний угол компонента, затем отпустить кнопку мыши. В форме появится компонент нужного размера.
Каждому компоненту Delphi присваивает имя, которое состоит из названия компонента и его порядкового номера. Например, если к форме добавить два компонента Edit, то их имена будут Edit1 и Edit2. Программист путем изменения значения свойства Name может изменить имя компонента. В простых программах имена компонентов, как правило, не изменяют.
На рис. В17 приведен вид формы после добавления двух компонентов Edit полей редактирования, предназначенных для ввода исходных данных. Один из компонентов выделен. Свойства выделенного компонента отображаются в окне Object Inspector.Чтобы увидеть свойства другого компонента, надо щелкнуть левой кнопкой мыши на изображении нужного компонента. Можно также выбрать имя компонента в окне Object TreeViewили из находящегося в верхней части окна Object Inspectorраскрывающегося списка объектов.
Рис. В17. Форма после добавления компонентов Edit
В табл. В3 перечислены основные свойства компонента Edit — поля ввода-редактирования.
Таблица ВЗ. Свойства компонента Edit (поле ввода-редактирования)
Свойство | Описание | ||
Name | Имя компонента. Используется в программе для доступа к компоненту и его свойствам, в частности — для доступа к тексту, введенному в поле редактирования | ||
Text | Текст, находящийся в поле ввода и редактирования | ||
Left | Расстояние от левой границы компонента до левой границы формы | ||
Top | Расстояние от верхней границы компонента до верхней границы формы | ||
Height | Высота поля | ||
Width | Ширина поля | ||
Font | Шрифт, используемый для отображения вводимого текста | ||
ParentFont | Признак наследования компонентом характеристик шрифта формы, на которой находится компонент. Если значение свойства равно True, то при изменении свойства Font формы автоматически меняется значение свойства Font компонента | ||
Delphi позволяет изменить размер и положение компонента при помощи мыши.
Для того чтобы изменить положение компонента, необходимо установить курсор мыши на его изображение, нажать левую кнопку мыши и, удерживая ее нажатой, переместить контур компонента в нужную точку формы, затем отпустить кнопку мыши. Во время перемещения компонента (рис. В18) отображаются текущие значения координат левого верхнего угла компонента (значения свойств Left и тор).
Для того чтобы изменить размер компонента, необходимо его выделить, установить указатель мыши на один из маркеров, помечающих границу компонента, нажать левую кнопку мыши и, удерживая ее нажатой, изменить положение границы компонента. Затем отпустить кнопку мыши. Во время изменения размера компонента отображаются текущие значения свойств Height И Width (рис. В19).
Свойства компонента так же, как и свойства формы, можно изменить при помощи Object Inspector.Для того чтобы свойства требуемого компонента были выведены в окне Object Inspector,нужно выделить этот компонент (щелкнуть мышью на его изображении). Можно также выбрать компонент из находящегося в верхней части окна Object Inspectorраскрывающегося списка объектов (рис. В20) или из списка в окне Object TreeView(рис. В21).
Рис. В18. Отображение текущих значений свойств Left и Тор при изменении положения компонента
Рис. В19. Отображение текущих значений свойств Height и Width при изменении размера компонента
Рис. В20. Выбор компонента
Рис. В21. Выбор компонента из списка в окне Object Inspector в окне Object TreeView
В табл. В4 приведены значения свойств полей редактирования Editi и Edit2. Компонент Editi предназначен для ввода длины дистанции, Edit2 — для ввода времени.
Обратите внимание на то, что значением свойства Text обоих компонентов является пустая строка.
Таблица В4. Значения свойств компонентов Edi t
Свойство | Компонент | |||
Edit1 | Edit2 | |||
Text | ||||
Тор | ||||
Left | ||||
Height | ||||
Width | ||||
Помимо полей редактирования в окне программы должна находиться краткая информация о программе и назначении полей ввода. Для вывода текста в форму используют поля вывода текста. Поле вывода текста (поле статического текста) — это компонент Label. Значок компонента Label находится на вкладке Standard(рис. В22). Добавляется компонент Label в форму точно так же, как и поле редактирования.
Рис. В22. Компонент Label — поле вывода текста
В форму разрабатываемого приложения надо добавить четыре компонента Label. Первое поле предназначено для вывода информационного сообщения, второе и третье — для вывода информации о назначении полей ввода, четвертое поле — для вывода результата расчета (скорости).
Свойства компонента Label перечислены в табл. В5.
Таблица В5. Свойства компонента Label (поле вывода текста)
Свойство | Описание | ||
Name | Имя компонента. Используется в программе для доступа к компоненту и его свойствам | ||
Caption | Отображаемый текст | ||
Font | Шрифт, используемый для отображения текста | ||
ParentFont | Признак наследования компонентом характеристик шрифта формы, на которой находится компонент. Если значение свойства равно True, текст выводится шрифтом, установленным для формы | ||
AutoSize | Признак того, что размер поля определяется его содержимым | ||
Left | Расстояние от левой границы поля вывода до левой границы формы | ||
Top | Расстояние от верхней границы поля вывода до верхней границы формы | ||
Height | Высота поля вывода | ||
Width | Ширина поля вывода | ||
Wordwrap | Признак того, что слова, которые не помещаются в текущей строке, автоматически переносятся на следующую строку | ||
Следует обратить внимание на свойства Autosize и Wordwrap. Эти свойства нужно использовать, если поле вывода должно содержать несколько строк текста. После добавления к форме компонента Label значение свойства Autosize равно True, т. е. размер поля определяется автоматически в процессе изменения значения свойства caption. Если вы хотите, чтобы находящийся в поле вывода текст занимал несколько строк, то надо сразу после добавления к форме компонента Label присвоить свойству Autosize значение False, свойству wordwrap — значение True. Затем изменением значений свойств width и Height нужно задать требуемый размер поля. Только после этого можно ввести в свойство caption текст, который должен быть выведен в поле.
После добавления полей вывода текста (четырех компонентов Label) и установки значений их свойств в соответствии с табл. В6 форма программы принимает вид, приведенный на рис. В23.
Обратите внимание, что значение свойства caption вводится как одна строка. Расположение текста внутри поля вывода определяется размером поля, значением свойств Autosize и wordwrap, а также зависит от характеристик используемого для вывода текста шрифта.
Рис. В23. Вид формы после добавления полей вывода текста
Таблица В6. Значения свойств компонентов Label1, Label2, Label3 И Label4
Компонент | Свойство | Значение | ||
Labell | AutoSize | False | ||
Wordwrap | True | |||
Caption | Программа вычислит скорость, с которой спортсмен пробежал дистанцию | |||
Top | ||||
Left | ||||
Height | ||||
Width | ||||
Label2 | Top | |||
Left | ||||
Caption | Дистанция (метров) | |||
Label3 | Top | |||
Left | ||||
Caption | Время (минуты, секунды) | |||
Label4 | AutoSize | False | ||
Wordwrap | True | |||
Top | ||||
Компонент | Свойство | Значение | ||
Label 4 | Left | |||
Height | ||||
Width | ||||
Последнее, что надо сделать на этапе создания формы — добавить в форму две командные кнопки: Вычислить и Завершить.Назначение этих кнопок очевидно.
Командная кнопка, компонент Button, добавляется в форму точно так же, как и другие компоненты. Значок компонента Button находится на вкладке Standard(рис. В24). Свойства компонента приведены в табл. В7.
Рис. В24. Командная кнопка — компонент Button
Таблица В7. Свойства компонента Button (командная кнопка)
Свойство | Описание | ||
Name | Имя компонента. Используется в программе для доступа к компоненту и его свойствам | ||
Caption | Текст на кнопке | ||
Enabled | Признак доступности кнопки. Кнопка доступна, если значение свойства равно True, и недоступна, если значение свойства равно False | ||
Left | Расстояние от левой границы кнопки до левой границы формы | ||
Top | Расстояние от верхней границы кнопки до верхней границы формы | ||
Height | Высота кнопки | ||
Width | Ширина кнопки | ||
После добавления к форме двух командных кнопок нужно установить значения их свойств в соответствии с табл. В8.
Таблица В8. Значения свойств компонентов Button1 и Button2
Свойство | Компонент | |||
Button1 | Button2 | |||
Caption | Вычислить | Завершить | ||
Тор | ||||
Left | ||||
Height | ||||
Width | ||||
Окончательный вид формы разрабатываемого приложения приведен на рис. В25.
Рис. В25. Форма программы Скорость бега
Завершив работу по созданию формы приложения, можно приступить к написанию текста программы. Но перед этим обсудим очень важные при программировании в Windows понятия:
- событие;
- процедура обработки события.
Событие и процедура обработки события
Вид созданной формы подсказывает, как работает приложение. Очевидно, что пользователь должен ввести в поля редактирования исходные данные и щелкнуть мышью на кнопке Вычислить.Щелчок на изображении командной кнопки — это пример того, что в Windows называется событием.
Событие (Event) — это то, что происходит во время работы программы. В Delphi каждому событию присвоено имя. Например, щелчок кнопкой мыши - это событие OnClick, двойной щелчок мышью событие OnDblClick.
В табл. В9 приведены некоторые события Windows.
Таблица В9. События
Событие | Происходит | ||
OnClick | При щелчке кнопкой мыши | ||
OnDblClick | При двойном щелчке кнопкой мыши | ||
OnMouseDown | При нажатии кнопки мыши | ||
OnMouseUp | При отпускании кнопки мыши | ||
OnMouseMove | При перемещении мыши | ||
OnKeyPress | При нажатии клавиши клавиатуры | ||
OnKeyDown | При нажатии клавиши клавиатуры. События OnKeyDown и OnKeyPress — это чередующиеся, повторяющиеся события, которые происходят до тех пор, пока не будет отпущена удерживаемая клавиша (в этот момент происходит событие OnKeyUp) | ||
OnKeyUp | При отпускании нажатой клавиши клавиатуры | ||
OnCreate | При создании объекта (формы, элемента управления). Процедура обработки этого события обычно используется для инициализации переменных, выполнения подготовительных действий | ||
OnPaint | При появлении окна на экране в начале работы программы, после появления части окна, которая, например, была закрыта другим окном, и в других случаях | ||
OnEnter | При получении элементом управления фокуса | ||
OnExit | При потере элементом управления фокуса | ||
Реакцией на событие должно быть какое-либо действие. В Delphi реакция на событие реализуется как процедура обработки события. Таким образом, для того чтобы программа выполняла некоторую работу в ответ на действия пользователя, программист должен написать процедуру обработки соответствующего события. Следует обратить внимание на то, что значительную часть обработки событий берет на себя компонент. Поэтому программист должен разрабатывать процедуру обработки события только в том случае, если реакция на событие отличается от стандартной или не определена. Например, если по условию задачи ограничений на символы, вводимые в поле Edit, нет, то процедуру обработки события OnKeyPress писать не надо, т. к. во время работы программы будет использована стандартная (скрытая от программиста) процедура обработки этого события.
Методику создания процедур обработки событий рассмотрим на примере процедуры обработки события OnClick для командной кнопки Вычислить.
Чтобы приступить к созданию процедуры обработки события, надо сначала в окне Object Inspectorвыбрать компонент, для которого создается процедура обработки события. Затем в этом же окне нужно выбрать вкладку Events(События).
Рис. В26. На вкладке Eventsперечислены события, которые может воспринимать компонент (в данном случае — командная кнопка)
В левой колонке вкладки Events(рис. В26) перечислены имена событий, которые может воспринимать выбранный компонент (объект). Если для события определена (написана) процедура обработки события, то в правой колонке рядом с именем события выводится имя этой процедуры.
Для того чтобы создать функцию обработки события, нужно сделать двойной щелчок мышью в поле имени процедуры обработки соответствующего события. В результате этого откроется окно редактора кода, в которое будет добавлен шаблон процедуры обработки события, а в окне Object Inspectorрядом с именем события появится имя функции его обработки (рис. В27).
Delphi присваивает функции обработки события имя, которое состоит из двух частей. Первая часть имени идентифицирует форму, содержащую объект (компонент), для которого создана процедура обработки события. Вторая часть имени идентифицирует сам объект и событие. В нашем примере имя формы — Form1, имя командной кнопки — Buttoni, а имя события -Click.
Рис. В27. Шаблон процедуры обработки события, сгенерированный Delphi
В окне редактора кода между словами begin и end можно печатать инструкции, реализующие функцию обработки события.
В листинге В1 приведен текст функции обработки события onclick для командной кнопки Вычислить.Обратите внимание на то, как представлена программа. Ее общий вид соответствует тому, как она выглядит в окне редактора кода: ключевые слова выделены полужирным, комментарии — курсивом (выделение выполняет редактор кода). Кроме того, инструкции программы набраны с отступами в соответствии с принятыми в среде программистов правилами хорошего стиля.