
Мансуров. Основы программирования в среде Lazarus. 2010
.pdfГлава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
6.3.3 Компоненты
Суть визуального программирования заключается в том, что вы из набора компонентов библиотеки LCL переносите на форму нужные вам визуальные компоненты, настраиваете их под собственные потребности и формируете ди-
зайн вашей программы. Компоненты также как и форма являются некоторыми графическими объектами. И каждый компонент реализован в виде класса. На-
пример, компонент TLabel (надпись) реализован в виде класса. Название ком-
понента соответствует имени класса. То есть когда мы ведем речь о компоненте
TLabel, мы подразумеваем класс TLabel.
Компоненты бывают видимыми и невидимыми. При проектировании фор-
ма выступает в роли контейнера для компонентов. При этом на форму можно разместить и невидимые компоненты.
Свойства и методы компонентов также отображаются в инспекторе объек-
тов. Чтобы увидеть их, достаточно выделить требуемый компонент на форме.
6.3.4 Обработчики событий
Свойства объекта определяют его внешний вид (размер, шрифт, цвет и т.д.), а совокупность событий определяют поведенческую сторону объекта. Об-
работчиком события является процедура, которая выполняет те или иные дей-
ствия в ответ на наступление события. Т.е. с помощью этой процедуры (обра-
ботчика события) реализуется реакция объекта на событие, например на щел-
чок мыши.
Таким образом, задача программиста сводится к тому, чтобы определить необходимые свойства объектов в его приложении и написать обработчики тех событий, на которые должен реагировать тот или иной объект приложения.
Инспектор объектов позволяет определить обработчики событий, на кото-
рые должна реагировать форма или ее компоненты. Во вкладке События в ле-
481

6.3 Визуальное программирование в среде Lazarus
____________________________________________________________________
вой колонке приведен список всех событий для данного объекта. Не обязатель-
но разрабатывать обработчики для всех событий. Как мы уже отмечали, если для некоторого события отсутствует его обработчик, то приложение просто не будет реагировать на это событие. Создайте новый проект в Lazarus. В инспек-
торе объектов откройте вкладку События. Выберите событие OnCreate, рис.
6.16. Это событие возникает при создании окна приложения. Щелкните по кнопке с троеточием. В редакторе кода появится заготовка кода процедуры об-
работчика данного события, рис. 6.17.
Рис. 6.16. Вкладка "События"
Рис. 6.17. Заготовка кода процедуры обработчика события
482
Глава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
Обратите внимание, Lazarus автоматически присвоил процедуре имя
FormCreate, присоединив к нему имя класса TForm1. В инспекторе объектов также появилось имя процедуры FormCreate – обработчика события
OnCreate.
Перейдите в редактор исходного кода, в обработчике события
FormCreate введите следующий код:
Form1.Caption:='Моѐ первое графическое приложение';
Запустите свое приложение. Вы увидите, что в строке заголовка окна вме-
сто стандартного Form1, появился ваш текст.
Из этого примера мы можем сделать один очень важный вывод. Оказыва-
ется свойства объекта можно изменять динамически во время выполнения при-
ложения. Для доступа к свойству объекта необходимо указать имя этого объек-
та (в нашем случае формы Form1) и через точку имя свойства (Caption).
Далее, в инспекторе объектов выберите событие OnClick. В обработчике события введите код:
Form1.Caption:= 'Зачем ты на меня нажал?';
Запустите приложение. Щелкните мышью по окну вашего приложения. Вы видите, что в строке заголовка окна текст меняется. Т.е. можно воочию убе-
диться, что ваше приложение на самом деле реагирует на нажатие мыши.
Выберите теперь, например, событие OnDblClick. Если вы раскроете раскрывающийся список, то вы увидите список уже имеющихся обработчиков событий, рис. 6.18.
483

6.3 Визуальное программирование в среде Lazarus
____________________________________________________________________
Рис. 6.18. Список уже имеющихся обработчиков событий
Если вам нужно, чтобы ваше приложение реагировало на какое-то событие точно таким же образом, как и на некоторое другое событие, и обработчик это-
го события уже имеется, то вы можете просто выбрать из списка нужный вам обработчик события. В нашем примере для события OnDblClick вы можете выбрать обработчик FormClick или FormCreate. Этим можно избежать неоправданного дублирования кода.
6.3.5 Простейшие компоненты
Рассмотрим теперь некоторые компоненты библиотеки LCL Lazarus. Дос-
туп к компонентам в Lazarus организован через палитру компонентов, рис. 6.19.
Рис. 6.19. Палитра компонентов Lazarus
Палитра компонентов состоит из страниц или вкладок, в которых и нахо-
дятся компоненты, сгруппированные по некоторому признаку. На рисунке 6.19
показана страница Standard, в которой расположены наиболее часто исполь-
зуемые, так называемые стандартные компоненты. По названию страницы можно понять, какие компоненты находятся в той или иной вкладке. Например,
ясно, что на странице Dialogs находятся компоненты для организации диало-
484
Глава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
га с пользователем.
В соответствии с предназначением книги, мы не будем рассматривать все компоненты (для этого необходимо писать новую книгу примерно такого же объема, что и эта!).
6.3.5.1. Компонент TLabel
Этот компонент, его еще называют меткой или надписью, позволяет ото-
бразить некоторый текст на экране. Основные свойства этого компонента:
Name – имя в приложении, используется для доступа к компоненту.
Caption – текст, который будет отображаться в поле компонента.
Color – цвет фона надписи.
Font – это свойство является составным. С помощью этого свойства можно настроить параметры шрифта, для отображения текста надписи: цвет букв
(Color), размер шрифта (Size), название шрифта (Name) и т.д.
Alignment – выравнивание текста надписи. Здесь taLeftJustify – по левому краю, taCenter – по центру, taRightJustify – по правому краю.
Height – высота надписи в пикселах.
Width – ширина надписи в пикселах.
AutoSize – автоматическое изменение размера надписи в зависимости от длины текста. True – вертикальный и горизонтальный размер надписи зависит от длины текста, False – размеры компонента устанавливаются вручную, вы-
равнивание текста производится свойством Alignment.
WordWrap – если имеет значение True, то производится перенос текста по словам, т.е. текст надписи отображается в несколько строк, иначе текст выво-
дится в одну строку.
Visible – определяет видимость компонента во время выполнения прило-
жения. По умолчанию имеет значение True, т.е. компонент виден в момент
485

6.3 Визуальное программирование в среде Lazarus
____________________________________________________________________
выполнения приложения.
Таковы наиболее часто используемые свойства компонента TLabel. В ин-
спекторе объектов вы найдете еще множество свойств, разобраться с которыми вы можете самостоятельно.
Наиболее важными свойствами являются Name и, естественно Caption.
В Caption вы задаете текст надписи, а в Name имя, которое будет ис-
пользоваться вами для доступа к компоненту в программе.
Рассмотрим пример. Практически в любой книге посвященной программи-
рованию для начинающих рассматривается пример, которому даже присвоено имя – Hello World. Эта простейшая программа просто выводит текст при-
ветствия на экран. Не отступим от этой традиции и мы. Давайте напишем эту программу. Запустите Lazarus, создайте новый проект. Если вы в настройках окружения убрали галочку "Открывать последний проект при запуске", то но-
вый проект создастся автоматически. Перенесите на форму компонент TLabel.
Это делается очень легко и просто. В палитре компонентов на странице
Standard (по умолчанию открыта именно эта страница) найдите компонент
TLabel, рис. 6.20.
Рис. 6.20. Страница "Standard" палитры компонентов
Кроме того, если немного подержать указатель мыши над компонентом,
выведется всплывающая подсказка с именем компонента. Нажмите на значок компонента, затем щелкните мышью на свободном месте формы. Выбранный вами компонент будет перенесен на форму. Он будет также автоматически вы-
486

Глава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
деленным, так что все его свойства будут доступны в инспекторе объектов.
Нажмите на свойство Caption, его значение (по умолчанию Label1) бу-
дет выделено синим цветом. Можете сразу набирать текст надписи. Наберите
"Hello, World!" Этот текст появится не только в окошке ввода свойства
Caption, но и сразу будет виден в поле текста компонента, рис. 6.21.
Рис. 6.21. Пример ввода текста надписи
Посмотрим, какие изменения произошли в коде по сравнению с програм-
мой с пустым окном (см. раздел 6.3.1). Мы видим, что Lazarus добавил в описа-
ние класса формы TForm1 экземпляр класса TLabel – Label1, причем авто-
матически, без нашего участия! Как только мы добавляем на форму тот или иной компонент, Lazarus тут же добавит экземпляры классов соответствующих компонентов, формируя таким образом описание класса формы вашего прило-
жения. Нажмите клавишу F9. После компиляции и запуска вашего приложения на экран будет выведено окно с надписью "Hello, World!", рис. 6.22.
487

6.3 Визуальное программирование в среде Lazarus
____________________________________________________________________
Рис. 6.22. Окно графического приложения с компонентом TLabel
Рассмотрим еще одно интересное свойство, которое довольно часто при-
меняется. Это свойство Visible. С помощью этого свойства можно управлять видимостью компонента во время работы приложения.
Давайте создадим приложение, в котором будем динамически менять свойства компонента, а также посмотрим последовательность действий для разработки обработчика событий.
Создайте новый проект. Перенесите на форму три компонента TLabel.
Компонент Label1 разместите в центре формы. Свойство Caption оставьте без изменения. Компонент Label2 разместите в правом верхнем углу формы,
примерно так, как показано на рисунке 6.23.
Рис. 6.23. Форма программы
Свойство Caption измените на "English". Компонент Label3 размес-
тите прямо на компонент Label2 так, чтобы он закрывал его (оказывается так можно делать!). Свойство Caption измените на "Русский". Выделите фор-
му. Проще всего это сделать в инспекторе объектов, рис. 6.24.
488

Глава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
Рис. 6.24. Инспектор объектов. События формы
Откройте вкладку События, выберите событие OnCreate. Нажмите на кнопку с троеточием или дважды щелкните по полю с треугольником. Lazarus
тут же добавит в описание класса формы соответствующий метод, а в редакто-
ре исходного кода появится заготовка для реализации этого метода – обработ-
чика события, рис. 6.25.
Рис. 6.25. Заготовка обработчика события
Обработчик событий это обычная процедура. В обработчике события
OnCreate между операторами begin и end введите следующий код (для удобства привожу текст процедуры полностью:
489
6.3 Визуальное программирование в среде Lazarus
____________________________________________________________________
procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption:= 'Привет, Мир!';
Label2.Visible:= true;
Label3.Visible:= false;
end;
Выделите компонент Label2, опять же проще будет через инспектор объ-
ектов. Во вкладке События, выберите событие OnClick. В его обработчике
введите код:
procedure TForm1.Label2Click(Sender: TObject); begin
Label2.Visible:= false;
Label3.Visible:= true;
Label1.Caption:= 'Hello, World!!';
end;
Теперь выделите компонент Label3, выберите событие OnClick. В его
обработчике введите код:
procedure TForm1.Label3Click(Sender: TObject);
begin
Label2.Visible:= true;
Label3.Visible:= false;
Label1.Caption:= 'Привет, Мир!';
end;
Запустите приложение, рис. 6.26.
490