Событие и процедура обработки события
Начало работы в Delphi
Вид экрана после запуска Delphi несколько необычен (смотри рисунок 1). Вместо одного окна на экране появляются четыре: главное окно Delphi, окно формы Form1, окно инспектора объектов Object Inspector и окно редактора кода Unit1.pas, которое почти полностью закрыто окном формы.
рисунок 1.
В главном окне Delphi (рисунок 2) находится меню команд Delphi, панель инструментов и палитра компонентов.
Окно формы Form1 представляет собой заготовку (макет) окна разрабатываемого приложения.
Рисунок 2
Первый проект
Для демонстрации возможностей Delphi и технологии визуального проектирования займемся разработкой программы пересчета веса из фунтов в килограммы.
Форма приложения
Работа над новым проектом (так в Delphi называется разрабатываемое приложение) начинается с создания стартовой формы - окна, которое появляется при запуске приложения.
Примечание:
Диалоговое окно программы, которое открывается во время ее работы на этапе разработки программы, называется формой.
Стартовая форма создается путем изменения свойств (характеристик) формы Form1. Свойства формы определяют ее внешний вид: размер, положение на экране, текст заголовка, вид рамки. Свойства перечислены на вкладке Properties (Свойства) диалогового окна Object Inspector (Инспектор объектов) (рис. 3). В левой колонке находятся имена свойств, а в правой - их значения.
Рисунок 3. Замена значения свойства Caption
При создании формы в первую очередь следует изменить значение свойства Caption (Заголовок). В нашем примере надо заменить Form1 на Фунты-килограммы. Для этого необходимо щелкнуть мышью поле Caption. В результате в правой колонке, где находится текущее значение (Form1) свойства caption (Заголовок), появится курсор (рис 3). Используя клавишу <Backspase>, удалите Form1 и введите Фунты-килограммы.
Аналогичным образом можно установить значения свойств Height и width, которые определяют высоту и ширину формы. Этим свойствам надо присвоить значения 185 и 290.
Примечание:
Размер формы и ее положение на экране, а также размер и положение элементов управления на поверхности формы задаются в пикселах, т. е. точках экрана.
Размер формы можно изменить точно так же, как и размер любого другого окна Windows, т. е. захватом и перемещением (с помощью мыши) границы окна. По окончании перемещения границ автоматически изменятся значения свойств Height и width. Они будут соответствовать установленному размеру формы.
При выборе некоторых свойств, например, свойства Color (Цвет), определяющего цвет фона формы, справа от значения свойства выводится значок стрелка), указывающий на наличие раскрывающегося списка. Щелчок на
стрелке раскрывает список допустимых значений свойства, из которого о выбрать нужное значение.
Объекты, в том числе и формы, помимо обычных свойств могут иметь и сложные свойства. Перед именем сложного свойства стоит значок "плюс". При двойном щелчке на имени сложного свойства раскрывается список уточняющих свойств, а значок "плюс" меняется на "минус".
В поле значения сложного свойства Font расположена командная кнопка с тремя точками, при нажатии которой появляется стандартное диалоговое окно Windows, позволяющее выбрать шрифт и задать его параметры.
Большинство свойств определяют внешний вид формы. Свойство Name, определяющее имя формы, используется в программе для управления формой.
В табл. 2.1 приведены измененные свойства формы разрабатываемого приложения (программы перевода фунтов в килограммы). Остальные свойства формы оставлены без изменения и в таблице не приводятся.
Таблица 1. Свойства формы разрабатываемого приложения и их значения
Свойство | Обозначение | Значение |
Имя формы | Name | Form1 |
Заголовок | Caption | Фунты-килограммы |
Высота | Height | |
Ширина | Width | |
Шрифт | Font.Name | Arial |
Размер шрифта | Font.Size |
В табл. 1 приведены значения вложенных свойств Name и size сложного свойства Font. Перед именем вложенного свойства указывается имя свойства, его вмещающего.
После установки значений свойств, перечисленных в табл. 1, форма принимает вид, изображенный на рис. 4.
Рисунок 4.
Компоненты формы
Программа пересчета веса из фунтов в килограммы должна получить от пользователя исходные данные - значение веса в фунтах. В Windows данные с клавиатуры вводятся в поля редактирования. Поэтому в форму надо добавить компонент - поле редактирования.
В Delphi поля редактирования, командные кнопки, поля статического текста и прочие элементы управления, находящиеся в форме, называются компонентами (компоненты формы). В программе форма и компоненты рассматриваются как объекты. Этим можно объяснить то, что окно, в котором находятся свойства компонентов, называется Object Inspector (Инспектор объектов).
Для того чтобы добавить в форму компонент, необходимо в палитре компонентов (рисунок 5) выбрать вкладку, щелкнуть пиктограмму нужного компонента, а затем щелкнуть левой кнопкой мыши в той точке формы, где дол-
жен находиться правый верхний угол компонента. В результате в форме является компонент стандартного размера.
Рис. 5. Вкладка Standard палитры компонентов содержит наиболее часто используемые компоненты
Для того чтобы добавить в форму компонент заданного размера, необходимо после выбора пиктограммы нужного компонента поместить курсор мыши в ту точку формы, где должен находиться левый верхний угол компонента Затем следует нажать левую кнопку мыши и, удерживая ее нажатой, переместить курсор в точку, где должен находиться правый нижний угол компонента, и отпустить кнопку мыши. В форме появится компонент нужного размера.
На рис. 6 представлен вид формы после добавления в нее поля редактирования (Edit1). Компонент формы, окруженный восемью маленькими квадратиками (маркерами), называется выделенным (маркированным). Для того чтобы выделить компонент, надо щелкнуть его мышью.
Рисунок 6.
Свойства маркированного компонента отображаются в диалоговом окне Object Inspector (Инспектор объектов). В табл. 2 перечислены основные свойства компонента - поле редактирования.
Таблица 2. Свойства компонента поле редактирования
Свойство | Обозначение |
Имя поля. Используется в программе для доступа к содержимому (тексту) поля | Name |
Текст, находящийся в поле ввода-редактирования | Text |
Расстояние от левой границы поля до левой границы формы | Left |
Расстояние от верхней границы поля до верхней границы формы | Top |
Высота поля | Height |
Ширина поля | Width |
Шрифт, используемый для отображения вводимого текста | Font |
Признак наследования свойств шрифта родительской формы | ParentFont |
Delphi предоставляет возможность изменить размер компонента и его положение на поверхности формы.
Для того чтобы изменить положение компонента, необходимо установить курсор мыши на его изображение, нажать левую кнопку мыши и, удерживая ее нажатой, переместить компонент в нужную точку формы, затем отпустить кнопку мыши. Во время перемещения компонента Delphi отображает текущие значения координат верхнего левого угла компонента (значения свойств Left и Tор).
Для того чтобы изменить размер компонента, необходимо его выделить, установить указатель мыши на один из маркеров, помечающих границу компонента, нажать левую кнопку мыши и, удерживая ее нажатой, изменить положение границы компонента. Затем отпустить кнопку мыши. Во время изменения размера компонента Delphi отображает его текущие размеры: высоту и ширину (значения свойств Height и width).
Свойства компонента так же, как и свойства формы, можно изменить при помощи инспектора объектов. Для того чтобы свойства требуемого компонента отображались в диалоговом окне Object Inspector (Инспектор объектов), необходимо выделить компонент или выбрать его имя в раскрывающемся списке в верхней части этого окна (прямо под заголовком).
В табл. 3 приведены значения свойств поля редактирования, предназначенного для ввода веса в фунтах.
Таблица 3, Значения свойств поля редактирования (Edit1)
Свойство (Name) | Значение |
Text | |
Top | |
Left | |
Height | |
Width |
Помимо полей редактирования окно формы должно содержать поясняющий текст: краткое информационное сообщение.
Текст, находящийся в форме, называют меткой. Метка добавляется в форму точно так же, как и поле редактирования. Значок компонента "метка" (буква А) находится на вкладке Standard (Стандартная) палитры компонентов (рис. 3). После того как метка добавлена в форму, можно изменить ее свойства в диалоговом окне Object Inspector (Инспектор объектов).
В форму разрабатываемого приложения надо добавить две метки. Первая метка будет представлять собой информационное сообщение. Вторая метка предназначена для вывода результата пересчета веса из фунтов в килограммы.
После добавления меток и установки значений их свойств, форма разрабатываемого приложения приобретает вид, представленный на рис. 7
Рисунок 7.
Таблица 4. Значения свойств меток Label1 и Label2
Свойство (Name) | Значение метки Labe1 | Значение метки Label2 |
Caption | Введите вес в фунтах и щелкните на <Пересчет> | |
AutoSize | false | false |
Top | ||
Left | ||
Height | ||
Width | ||
Wordwrap | true | true |
ParentFont | true | false |
Свойство ParentFont (Наследование параметров шрифта родительской формы) метки Label2 имеет значение false. Поэтому свойство Font этой метки не наследует значения свойства Font "родителя", в данном случае основной формы. Это дает возможность установить свойства шрифта метки иные, чем у формы. У метки Label1 значение свойства ParentFont оставим без изменения.
Если свойство AutoSize (Автоматический подгон размера) имеет значение true, то Delphi автоматически устанавливает размеры метки в зависимости от количества символов текста метки, используемого шрифта и его размера.
При необходимости расположить текст метки в несколько строк следует свойству AutoSize присвоить значение false и вручную установить значения свойств, определяющих размер метки.
В завершение в форму надо добавить командную кнопку, при щелчке которой будет выполняться пересчет веса в фунтах, введенного в поле ввода, в вес в килограммах.
Кнопка добавляется в форму точно так же, как и другие компоненты. Пиктограмма командной кнопки (в виде кнопки ОК) находится на вклад Standard (Стандартная) палитры компонентов. После добавления командной кнопки в диалоговом окне Object Inspector (Инспектор объект необходимо установить требуемые значения ее свойств, которые представлены в табл. 5
Таблица 5. Значения свойств командной кнопки Button1
Свойство (Name) | Значение кнопки |
Caption | Пересчет |
Top | |
Left | |
Height | |
Width |
Окончательный вид формы разрабатываемого приложения пересчета веса из фунтов в килограммы представлен на рис. 8
Рисунок
Событие и процедура обработки события
Вид созданной формы подсказывает, как работает приложение. Очевидно, что пользователь должен ввести в поле редактирования значение веса в фунтах и щелкнуть на кнопку <Пересчет>. Щелчок на изображении командной кнопки - это пример того, что в Windows называется событием.
Событие - это то, что происходит во время работы приложения в Delphi у каждого события есть имя. Например, щелчок кнопкой мыши - это событие OnClick, двойной щелчок мышью - событие OnDblClick.
Таблица 6. События Windows
Событие | Происходит |
OnClick | При щелчке кнопкой мыши |
OnDblClick | При двойном щелчке кнопкой мыши |
OnEnter | Перед тем, как элемент управления действительно получает фокус |
OnError | Когда элемент контроля обнаруживает ошибку и не может вернуть информацию об ошибке вызывающей программе |
OnExit | Непосредственно перед тем, как элемент управления теряет фокус |
OnKeyDown | При нажатии клавиши. События OnKeyDown и OnKeyPress - это чередующиеся, повторяющиеся события, которые происходят до тех пор, пока не будет отпущена удерживаемая клавиша. |
OnKeyPress | Когда пользователь нажимает клавишу, которая генерирует печатаемый символ. Может происходить также при одновременном нажатии клавиши печатаемого символа и клавиши <Ctrl>. Не происходит при нажатии клавиш <Tab>, <Enter> и клавиш перемещения курсора. |
OnKeyUp | При отпускании нажатой клавиши |
OnMouseDown | При нажатии кнопки мыши |
OnMouseMove | При перемещении мыши |
OnMouseUp | При отпускании кнопки мыши |
Реакцией на событие должно быть какое-либо действие. Например, реакцией на событие OnClick, произошедшее на кнопке <Пересчет>, должен быть пересчет веса из фунтов в килограммы. В Дельфи реакция на событие реализуется как процедура обработки события. Таким образом, задача программиста состоит в написании необходимых процедур обработки событий. Методику создания подобных процедур рассмотрим на примере процедуры обработки события для командной кнопки.
Сначала необходимо выделить объект, для которого создается процедура обработки события. В нашем примере таким объектом является командная кнопка <Пересчет>. Затем следует выбрать вкладку Events (события) диалогового окна Object Inspector. На вкладке будет отображен список событий, которые способен воспринимать маркированный (выделенный) компонент. Список событий для наше командной кнопки приведен на рисунке 9.
Рисунок 9.
В левой колонке вкладки Events перечислены имена событий, на которые может реагировать маркированный объект. Если для события определена процедура обработки, то в правой колонке рядом с именем события выводится имя этой процедуры.
Для того, чтобы создать процедуру обработки события, необходимо выполнить двойной щелчок в поле имени процедуры обработки события (т.е. в правой колонке). В результате откроется окно редактора кода Unit1.pas (в Дельфи) кодом называется текст программы) с шаблоном процедуры обработки события (рисунок 10), который создается в Дельфи автоматически.
Рисунок 10.
Дельфи присваивает процедуре обработки события имя, которое состоит из двух частей. Первая часть имени идентифицирует форму, содержащую объект, для которого создается процедура обработки события. Вторая часть имени идентифицирует сам объект и событие. В нашем примере имя формы - Form1, имя командной кнопки - Button1, а имя события Click.
В окне редактора кода между begin и end можно печатать инструкции языка Object Pascal, реализующие процедуру обработки события. Ниже приведен текст процедуры обработки события OnClick для командной кнопки <Пересчет> :
procedure TForm1.Button1Click(Sender: TObject);
var
f:real; //вес в фунтах
k:real; //вес в килограммах
begin
f:=StrToFloat(Edit1.Text); //перевели содержимое Edit1 в число
k:=f*0.4059;
label2.Caption:=Edit1.text+' фунт(а/ов) это '+
FloatToStr(k)+' килограмм';
end;
[an error occurred while processing this directive]
Программа получает исходные данные из поля редактирования Edit1 путем обращения к свойству Text. Свойство Text содержит строку символов (текст), поэтому в программе для преобразования изображения числа в действительное число используется функция StrToFloat.
Вычисленное значение выводится программой в поле метки Label2 путем присвоения этого значения свойству Caption. Для преобразования действительного числа в его изображение (текст сообщения с результатом пересчета) используется функция FloatToStr.
Редактор кода
Редактор кода Дельфи автоматически выделяет ключевые (зарезервированные) слова языка программирования Object Pascal (begin, end, const, var и другие) полужирным шрифтом, что делает текст программы более выразительным и облегчает восприятие структуры программы.
Помимо ключевых слов редактор кода выделяет комментарии. Как только программист напечатает символ начала комментария (открывающую фигурную скобку - '{' ), так текст, стоящий после этой скобки, изменит свой вид и станет комментарием. При компиляции комментарии не учитываются, они нужны лишь для тех, кто будет просматривать код. После того как программист введет закрывающую скобку комментария, текст находящийся после этой скобки, приобретет обычный вид.