Иерархия визуальных компонентов
Рассмотрим иерархию классов Delphi, частью которой является и VCL (рис. 2.12).
Рис. 2.12. Иерархия классов Delphi
Как мы уже знаем, все классы, и компоненты в том числе, являются прямыми или косвенными потомками класса TObject. Класс TObject инкапсулирует небольшой набор обычных для всех классов методов:
- способность создания, поддержки и уничтожения экземпляра класса с выделением, инициализацией и освобождением оперативной памяти для данного экземпляра класса;
- предоставление информации об экземпляре класса и информации о типе времени выполнения (RTTI);
- поддержка обработки сообщений;
- поддержка интерфейсов, осуществляющих экземпляр класса.
Следующий базовый класс, являющийся прямым потомком TObject - класс TPersistent. Данный класс является предком для всех классов, предназначенных для работы с потоками. Класс TPersistent наследует все свойства и методы своего предка - класса TObject, и может, кроме того, считывать данные из потока и записывать их в поток. Класс TPersistent обеспечивает:
- определения процедур для загрузки и помещения данных в поток;
- назначение свойствам экземпляра класса конкретных значений;
- средства для передачи содержимого одного экземпляра класса другому.
- отомком класса TPersistent является класс TComponent - базовый класс всех компонентов визуальной библиотеки компонентов (VCL) Delphi. Наследники класса Tcomponent, как и сам класс имеют следующие возможности:
- способность отображаться на палитре компонентов Delphi, а также способность размещения на форме;
- способность быть обладателем иных компонентов и управлять другими компонентами;
- способность быть преобразованным в элемент управления ActiveX или объект СОМ с помощью мастера (Wizard).
Следующий класс - потомок вышеописанного класса TComponent - класс Tcontrol. Класс TControl является базовым классом для всех визуальных компонентов, т. е. потомки этого класса будут видны и доступны пользователю во время выполнения приложения. Все классы, являющиеся потомками TControl, имеют свойства, методы и события, которые определяют особенности данного класса, например положение компонента на экране, размер и т. д.
Нам осталось рассмотреть еще два класса, которые являются потомками класса TControl.
Первый из этих классов - класс TGraphicControl. Данный класс предназначен для создания визуальных компонентов, которые не являются окнами, т. е. не могут содержать в себе других компонентов и получать фокус ввода. Главное предназначение данного класса - способность отображать графику или текст на компоненте. Примерами потомков класса TGraphicControl могут выступать такие компоненты, Как TBevel, TImage, TSpeedButton И Др.
Класс TGraphicControl передает своим потомкам свойство canvas, позволяющее получать доступ к поверхности компонента, на которой можно рисовать или писать. Кроме того, класс TGraphicControl передает своим потомкам метод Paint. Так как графический компонент - потомок TGraphicControl не нуждается в идентификаторе окна Windows, данный компонент требует немного ресурсов, и использование графического компонента занимает меньше времени, чем оконного компонента Twincontrol.
Второй из этих классов - класс Twincontroi. Данный класс является базовым классом для всех оконных визуальных компонентов. Оконный визуальный компонент - это компонент, который:
- может получать фокус ввода во время выполнения приложения;
- может содержать в себе другие компоненты. Компонент, который содержит в себе другие компоненты, называется родительским (parent). Компонент, содержащийся в другом компоненте, называется дочерним (child);
- имеет идентификатор окна Windows (handle). Каждый оконный компонент обрабатывается непосредственно операционной системой, поэтому ему назначается свой уникальный идентификатор.
Примерами оконных компонентов являются TButtonControl, TCustomEdit и др.