Иерархия
классов CLX
Как уже говорилось ранее,
библиотека классов CLX содержит наиболее применяемые компоненты, из которых
строится ваше приложение. Так как в языке Object Pascal объекты создаются путем
наследования, библиотека классов CLX построена по иерархическому принципу. Рассмотрим
иерархию компонентов CLX (рис. 7.1).
Приведенный рис. 7.1 требует
некоторых пояснений. Отметим, что данный рисунок показывает полную иерархию
классов Kylix. Компоненты CLX являются лишь составной частью этой иерархии и
начинаются с класса TComponent,
который является базовым для всех
компонентов CLX.
Далее рассмотрим полную
иерархию классов Kylix.
Как мы уже знаем, все классы,
и компоненты в том числе, являются прямыми или косвенными потомками класса TObject
.
Класс TObject
инкапсулирует небольшой набор обычных для всех классов
методов:
Рис.
7.1. Иерархия классов Kylix
Следующий базовый класс,
являющийся прямым потомком TObject,
— класс TPersistent
.
Данный класс является предком всех классов, предназначенных для работы с потоками.
Класс TPersistent
наследует все свойства и методы своего предка
— класса TObject
, и может, кроме того, считывать данные из потока
и записывать их в поток. Класс TPersistent
обеспечивает:
На одном уровне с классом
TPersistent
находится класс TStream
, который тоже
является прямым потомком класса TObject
. Класс TStream
является базовым для объектов потока. Этот класс может читать или записывать
данные с носителей разных видов (файлы на дисках, динамическая память и т. д.).
В дополнение к методам чтения, записи и копирования данных из потока настоящий
класс обеспечивает поиск нужной позиции внутри потока. Этот класс относится
к абстрактным классам и имеет следующие дочерние классы:
TFileStream
— для работы с файлами;TStringStream
— для манипулирования строками в памяти;TMemoryStream
— для работы с буфером памяти. Потомком класса TPersistent
является класс TComponent
— базовый класс всех компонентов библиотеки
компонентов CLX Kylix. Наследники класса TComponent
, как и сам
класс, имеют следующие возможности:
На одном уровне с классом
TComponent
находятся еще несколько классов. Рассмотрим наиболее
интересные из них.
Класс TGraphic
— потомок класса Tpersistent,
абстрактный класс. Данный класс является
родительским для таких объектов, как иконки, растровые изображения и метафайлы,
которые могут хранить и отображать визуальные изображения. Данный класс, кроме
того, предоставляет методы для работы с объектом TPicture
и буфером
обмена.
Класс THandleComponent
— является базовым для невизуальных компонентов, у которых имеется дескриптор
окна.
Дескриптор окна — это
число (индекс), индивидуальное для данного конкретного окна, назначаемое системой
Linux.
Класс TField
— является базовым для всех компонентов, содержащих поля. Данный класс инкапсулирует
свойства, события и методы, которые используются для:
OnCalcFields
; Класс TDialog
—
это абстрактный класс, являющийся предком для всех диалоговых окон. Он используется
как базовый класс для двух основных типов диалоговых окон CLX:
TQtDialog
— базовый класс, инкапсулирующий библиотеку диалогов Qt
. Он используется
для таких задач, как открытие и сохранение файлов, установка шрифта и цвета,
а также для печати;TCustomDialog
— используется для решения задач поиска и замены текста в файле. Следующий класс — потомок
вышеописанного класса TComponent
— класс TControl.
Класс TControl
является базовым классом для всех визуальных компонентов,
т. е. потомки этого класса будут видны и доступны пользователю во время выполнения
приложения. Все классы, являющиеся потомками TControl
, имеют свойства,
методы и события, которые определяют особенности данного класса, например положение
компонента на экране, размер и т. д.
Нам осталось рассмотреть
еще два класса, которые являются потомками класса TControl
.
Первый из этих классов
— класс TGraphicControl
. Данный класс предназначен для создания
визуальных компонентов, которые не являются окнами, т. е. не могут содержать
в себе других компонентов и не могут получать фокус ввода. Главное предназначение
данного класса — способность отображать графику или текст на компоненте. Примерами
потомков класса TGraphicControl
могут выступать такие компоненты,
как, например, TBevel, TImage
. Класс TGraphicControl
передает своим потомкам свойство Сanvas
, позволяющее получать доступ
к поверхности компонента, на которой можно рисовать или писать. Кроме того,
класс TGraphicControl
передает своим потомкам метод Paint
.
Примечание
Подробному изучению графических возможностей Kylix посвящена глава 13 книги.
Второй из этих классов
— класс TWidgetControl.
Данный класс является базовым классом для
всех оконных визуальных компонентов.
Оконный визуальный компонент
— это компонент, который:
handle
). Каждый оконный компонент обрабатывается непосредственно
операционной системой, поэтому ему назначается индивидуальный уникальный идентификатор.
В CLX свойство Handle
является ничем иным, как указателем на
Qt
-объект, но называется дескриптором для совместимости с кодом
VCL Delphi. Примером оконного компонента
является TCustomEdit
.
Займемся теперь потомками
класса TWidgetControl
.
Класс TCustomControl
— это базовый класс для оконных компонентов, которые имеют свойство Сanvas
для рисования. Данный класс используется, в основном, для создания оконных
компонентов, которые не соответствуют стандартным окнам.
Класс TFrameControl — это
базовый класс для всех оконных компонентов, которые имеют различную окантовку
(различные стили бордюра). Данный класс поддерживает 3D-эффекты и имеет специальные
свойства для установки различных стилей бордюра.
Класс TScrollingWidget
— это базовый класс для всех оконных компонентов, которые имеют полосы
прокрутки (скроллинг). Такие компоненты обычно имеют горизонтальную и вертикальную
полосы прокрутки содержимого окна. Примерами таких компонентов могут служить
TForm
и TScrollBox
.
И наконец, класс TCustomForm
— базовый класс для создания окна на основе желаний программиста. Данный класс
объединяет в себе возможности всех своих классов-предков. Таким образом, он
поддерживает различные стили бордюра окна, имеет свойство Canvas
и может содержать полосы прокрутки.