CLX Kylix
Свойства, события и методы компонентов
Области видимости объектов (компонентов)
Иерархия классов CLX
В данной главе мы рассмотрим библиотеку классов CLX, которая поставляется со
средой Kylix. Изучим типы событий и научимся писать их обработчики. Узнаем,
как происходит наследование данных и кода компонентов Kylix. Кроме того, рассмотрим
иерархию классов CLX.
CLX Kylix
Kylix является средой для быстрой разработки программ под Linux. Для облегчения
работы программиста и ускорения создания приложений в стандартную поставку Kylix
входят некоторые готовые классы, которые называются компонентами. Эти компоненты
программист может использовать в своих приложениях. Они обеспечивают практически
все возможные элементы пользовательского интерфейса.
Библиотека компонентов Kylix называется CLX (произносится как "кликс").
Эта аббревиатура расшифровывается так: Библиотека компонентов для кросс-платформенной
(межплатформенной) разработки (Component Library for Cross-platform development).
Данная библиотека содержит более ста компонентов, готовых к использованию. Их
возможности могут быть расширены, самим программистом путем создания новых компонентов
на основе стандартных.
Библиотека CLX позволяет достаточно быстро разрабатывать эффективные программы
для Интернета, настольные приложения, а также приложения баз данных (как локальных,
так и сетевых).
CLX является развитием визуальной библиотеки компонентов Delphi (Visual Component
Library, VCL) и позволяет довольно легко переносить приложения, написанные на
Delphi, в среду Linux. О разработке межплатформенных приложений мы расскажем
в заключительной, шестой части книги.
Свойства, события и методы компонентов
CLX представляет собой иерархию классов Kylix, написанных на языке Object Pascal.
Все классы библиотеки имеют свои свойства, события и методы. Мы их подробно
рассмотрим в следующей главе. Пока же дадим здесь общее описание.
Свойства компонентов позволяют управлять их внешним видом и поведением. Установка
значений большинства свойств выполняется на этапе разработки приложения с помощью
инспектора объектов (см. рис. 6.5). Значение практически всех свойств компонентов
библиотеки CLX можно изменять в процессе выполнения программы.
Компоненты CLX могут генерировать и обрабатывать несколько десятков самых разнообразных
событий. События всегда принадлежат определенному типу. Большинство событий
имеет тип "уведомляющее" (то есть принадлежит типу TNotifyEvent).
Данный тип описывается следующим образом:
type TNotifyEvent = procedure (Sender: TObject) of object;
Таким образом, события уведомляющего типа указывают на источник события. Источник
события записывается в параметре sender.
Напомним, что все события в Kylix делятся на: Р пользовательские, или оконные
(widget); О системные (system).
ШлШвательские (оконные) события — это события, которые происходят в результате
каких-либо действий пользователя (движение мышью, нажатие кнопки и т. д.).
Системные события — это события, которые происходят внутри системы независимо
от действий пользователя
(тикание таймера и т. д.).
Компоненты библиотеки CLX так же, как и другие объекты, могут иметь (и имеют)
методы. Методы позволяют получать доступ к свойствам компонентов, скрывать и
отображать компоненты, а также выполнять другие операции (в том числе создание
и уничтожение компонентов).
Области видимости объектов (компонентов)
Область видимости объекта (компонента) — это часть программного кода, в пределах
которой существует прямой доступ к свойствам, событиям и методам объекта (компонента)
без явного указания его имени.
Таким образом, когда вы пишите код, находящийся в области видимости обвекта
(компонента), можно не указывать его имя для доступа к его свойствам, событиям
и методам.
В Качестве примера приведем часть программы (см. листинг 7.1), которая показывает
действие области видимости объекта (в данном примере формы Formi).
Листинг 7.1. Область видимости объекта Fbrm1
procedure TForml.ButtonlClick (Sender: TObject);
begin
Ccolor: = clGray; // Задаем цвет формы .
Caption := 'Форма с одной кнопкой'; // Изменяем заголовок формы
Button1. Caption := 'OK'; // Изменяем заголовок кнопки
end;
Итак, на приведенном выше листинге изменим значения свойств формы Formi без
указания имени формы, т. к. данная часть программного кода является областью
видимости для формы Eormi. Метод Buttoniciick является частью объекта Form1.
Две строки
Color := clGray; // Задаем цвет формы
Caption := 'Форма с одной кнопкой'; // Изменяем заголовок формы
будут равносильны строкам
Form1.Color := clGray; // Задаем цвет формы
Form1.Caption := 'Форма с одной кнопкой'; // Изменяем заголовок формы
Последняя строка листинга 7.1 изменяет значение свойства другого компонента
(Buttoni), поэтому нуждается в указании его имени.
Иерархия классов CLX
Как уже говорилось ранее, библиотека классов CLX содержит наиболее применяемые
компоненты, из которых строится ваше приложение. Так как в языке Object Pascal
объекты создаются путем наследования, библиотека классов CLX построена по иерархическому
принципу. Рассмотрим иерархию компонентов CLX (рис. 7.1).
Приведенный рис. 7.1 требует некоторых пояснений. Отметим, что данный рисунок
показывает полную иерархию классов Kylix. Компоненты CLX являются лишь составной
частью этой иерархии и начинаются с класса TComponent, который является базовым
для всех компонентов CLX.
Далее рассмотрим полную иерархию классов Kylix.
Как мы уже знаем, все классы, и компоненты в том числе, являются прямыми или
косвенными потомками класса TObject. Класс TObject инкапсулирует небольшой набор
обычных для всех классов методов:
способность создания, поддержки и уничтожения экземпляра класса с выделением,
инициализацией и освобождением оперативной памяти для данного экземпляра класса;
предоставление информации об экземпляре класса и информации о типе времени выполнения
(RTTI);
поддержка обработки сообщений;
поддержка интерфейсов, осуществляющих экземпляр класса.
Рис. 7.1. Иерархия классов Kylix
Следующий базовый класс, являющийся прямым потомком Tobject, — класс Tpersistent.
Данный класс является предком всех классов, предназначенных для работы с потоками.
Класс TPersistent наследует все свойства и методы своего предка — класса Tobject,
и может, кроме того, считывать данные из потока и записывать их в поток. Класс
TPersistent обеспечивает:
определения процедур для загрузки и помещения данных в поток;
назначение свойствам экземпляра класса конкретных значений;
средства для передачи содержимого одного экземпляра класса другому.
На одном уровне с классом TPersistent находится класс TStream, который является
прямым потомком класса Tobject. Класс TStream является базовым для объектов
потока. Этот класс может читать или записывать данные с носителей разных видов
(файлы на дисках, динамическая память и т. д.). В дополнение к методам чтения,
записи и копирования данных из потока настоящий класс обеспечивает поиск нужной
позиции внутри потока. Этот класс относится к абстрактным классам и имеет следующие
дочерние классы:
TFileStream — для работы с файлами;
TStringstream — для манипулирования строками в памяти;
TMemorystream — для работы с буфером памяти.
Потомком класса TPersistent является класс TComponent — базовый класс всех компонентов
библиотеки компонентов CLX Kylix. Наследники класса TComponent, как и сам класс,
имеют следующие возможности:
способность отображаться на палитре компонентов Kylix, О способность размещения
на форме;
способность быть обладателем других компонентов и управлять другими компонентами.
На одном уровне с классом TComponent находятся еще несколько классов. Рассмотрим
наиболее интересные из них.
Класс TGraphic — потомок класса Tpersistent, абстрактный класс. Данный класс
является родительским для таких объектов, как иконки, растровые изображения
и метафайлы, которые могут хранить и отображать визуальные изображения. Данный
класс, кроме того, предоставляет методы для работы с объектом TPicture и буфером
обмена.
Класс THandieComponent — является базовым для невизуальных компонентов, у которых
имеется дескриптор окна.
Дескриптор окна — это число (индекс), индивидуальное для данного конкретного
окна, назначаемое системой Linux.
Класс TFieid — является базовым для всех компонентов, содержащих поля. Данный
класс инкапсулирует свойства, события и методы, которые используются для:
смены значения поля в наборе данных;
конвертирования типов данных внутри поля;
подтверждения ввода данных в поле;
определения того, в каком качестве находятся данные внутри поля: в качестве
редактируемых или отображаемых;
подсчета результата в полях данных с помощью события onCaicFieids; П просмотра
значений полей из других наборов данных.
Класс TDialog — это абстрактный класс, являющийся предком для всех диалоговых
окон. Он используется как базовый класс для двух основных типов диалоговых окон
CLX:
TQtoialog — базовый класс, инкапсулирующий библиотеку диалогов Qt. Он используется
для таких задач, как открытие и сохранение файлов, установка шрифта и цвета,
а также для печати;
TCustomDiaiog — используется для решения задач поиска и замены текста в файле.
Следующий класс — потомок вышеописанного класса TComponent — класс TControi.
Класс TControi является базовым классом для всех визуальных компонентов, т.
е. потомки этого класса будут видны и доступны во время выполнения приложения.
Все классы, являющиеся
Tcontrol, имеют свойства, методы и события, которые определяют особенности данного
класса, например положение компонента на экране, размер и т. д.
Нам осталось рассмотреть еще два класса, которые являются потомками класса TControl.
Первый из этих классов — класс TGraphicControi. Данный класс предначен для создания
визуальных компонентов, которые не являются окнами т. е. не могут содержать
в себе других компонентов и не могут получать фокус ввода. Главное предназначение
данного класса — способность отображать графику или текст на компоненте. Примерами
потомков класса TGraphicControl могут выступать такие компоненты, как, например,
TBevel, TImage. Класс TGraphicControl передает своим потомкам свойство Canvas,
позволяющее получать доступ к поверхности компонента, на которой можно рисовать
или писать. Кроме того, класс TGraphicControi передает своим потомкам метод
Paint.
Примечание
Подробному изучению графических возможностей Kylix посвящена глава 13 книги.
Второй из этих классов— класс TWidgetcontroд. Данный класс является базовым
классом для всех оконных визуальных компонентов.
Оконный визуальный компонент — это компонент, который:
может получать фокус ввода во время выполнения приложения;
может содержать в себе другие компоненты. Компонент, который содержит в себе
другие компоненты, называется родительским (parent). Компонент, содержащийся
в другом компоненте, называется дочерним (child);
имеет идентификатор окна (handle). Каждый оконный компонент обрабатывается непосредственно
операционной системой, поэтому ему начается индивидуальный уникальный идентификатор.
В CLX свойство laddie является ничем иным, как указателем на Qt-объект, но называется
дескриптором для совместимости с кодом VCL Delphi.
Примером оконного компонента является TCustomEdit.
Займемся теперь потомками класса Twidget control.
Класс TCuetomcontrol — это базовый класс для оконных компонентов, которые имеют
свойство canvas для рисования. Данный класс используется, в основном, для создания
оконных компонентов, которые не соответствуют стандартным окнам.
Класс TFramecontrol — это базовый класс для всех оконных компонентов, которые
имеют различную окантовку (различные стили бордюра). Данный класс поддерживает
3D-эффекты и имеет специальные свойства для установки различных стилей бордюра.
Класс TScrollingWidget — это базовый класс для всех оконных компонентов, которые
имеют полосы прокрутки (скроллинг). Такие компоненты обычно имеют горизонтальную
и вертикальную полосы прокрутки содержимого окна. Примерами таких компонентов
могут служить т Form и TScrollBox.
И наконец, класс TCustomForm — базовый класс для создания окна на основе желаний
программиста. Данный класс объединяет в себе возможности всех своих классов-предков.
Таким образом, он поддерживает различные стили бордюра окна, имеет свойство
canvas и может содержать полосы прокрутки.