VCL (Visual Components Library) – библиотека визуальных компонент.
CLX(Component Library for Cross Platform -библиотека компонентов кроссплатформенного программирования)
Компонент – любой класс, порожденный от класса TComponent. То есть это класс, имеющий опубликованные свойства, объект которого содержится в палитре компонентов. Это так называемые “строительные кирпичики” для создания приложений. TComponent является предком всех компонентов VCL-библиотеки. Владельцем всех компонентов, расположенных в форме, является сама форма. Владельцем всех форм является приложение.
DELPHI содержит сложную иерархию классов, для построения пользовательского интерфейса, которые можно использовать в программе, создавая объекты этих классов или формируя классы потомки. В начале этой иерархии стоят классы, называемые абстрактными классами. Для них нельзя создать полноценные работающие объекты, но они являются родоначальниками целых семейств классов, для которых такие объекты уже могут быть созданы. Исходя из свойства наследования, в абстрактных классах помещены характеристики, присущие всем классам их семейств. Структура некоторых абстрактных классов, находящихся в начале иерархии классов, приведена на рисунке.10
Предком для всех компонентов является класс TComponent. Он содержит несколько свойств и методов, общих для всех потомков. В первую очередь каждый компонент обладает собственным именем. Все компоненты в программе взаимосвязаны: каждый компонент имеет владельца и сам может быть владельцем других компонент. Свойство компонента:
property Owner: TComponent;
является указателем на владельца. В конструкторе каждому компоненту передается указатель на Owner; это означает, что компонент будет находиться в списке владельца. Owner – объект, который при создании вызывает конструкторы всех объектов, владельцем которых он является, а при уничтожении – их деструкторы. Таким образом, при размещении компонент на форме можно не заботиться об их создании и уничтожении в программе.
Предком класса TComponent служит класс TPersistent: в нем реализован виртуальный метод Assign – основа для копирования объектов VCL.
Потомком класса TComponent является класс TControl – элемент управления Windows. Все что видит пользователь в клиентской области формы, порождено от класса TControl. Таким образом, потомки TControl являются визуальными компонентами. Этот класс уже обладает “поведением” – в нем предусматривается реакция на основные события. Но объект класса TControl не является окном Windows и не может получить фокус ввода.
Понятие окна Windows инкапсулировано в потомке TControl – классе TWinControl. Такой компонент получает соответствующий атрибут – дескриптор окна.
В библиотеке VCL классы TControl и Twincontrol являются предками всех компонентов, которые должны уметь отображать себя на экране при помощи графических средств операционной системы. В библиотеке CLX(Component Library for Cross Platform -библиотека компонентов кроссплатформенного программирования) аналогичную задачу выполняют классы TControl и TWidgetControl. Они обеспечивают работоспособность компонентов-потомков в качестве экранных объектов widget. Widget — класс, объекты которого должны менять свое поведение в зависимости от состояния. Большинство свойств и методов классов Twincontrol и TWidgetControl совпадают. Однако есть и различия, вызванные особенностями графических интерфейсов операционных систем Windows и Linux.
Благодаря созданию специального варианта библиотеки VCL, которая называется Component Library for Cross Platform (CLX) стала возможной кроссплатформенная разработка приложений в Delphi Большинство свойств и методов компонентов VCL и CLX идентичны. А существующие различия вызваны необходимостью использования специальных объектов - widget и особенностями представления визуальных элементов в Linux.
Каждый визуальный компонент унаследует от класса TControl такие важные свойства как:
1) property BoundsRect: TRect; - определяет прямоугольник, содержащий координаты верхнего левого и правого нижнего углов компонента в системе координат клиентской области родительского элемента. Можно установить положение и размер компонента, изменяя координаты верхнего левого угла, длины и ширины методом:
Кроме того, к каждой из этих величин есть раздельный доступ с помощью свойств:
2) property Left: Integer;
3) property Top: Integer;
4) property Width: Integer;
5) property Height: Integer;
6) property Visible: Boolean; - определяет возможность видимости элемента.
7) property Align: TAlign; - определяет выравнивание компонента относительно границ родителя. Может принимать такие значения как alNone– выравнивание отсутствует, alTop, alLeft, alRight, alBottom– выравнивание происходит по соответствующей стороне родителя.alClient– занимает все пространство клиентской области родителя.
Форма, работа с формами(стр 349)
Приложения, создаваемые в среде Delphi, как, впрочем, и любые другие Windows-программы, сосредоточены вокруг форм – окон приложения.
Форма – контейнер, в котором размещаются другие визуальные и невизуальные компоненты.
К каждой форме в Delphi привязываются 2 файла. Один из них, с типичным для языка Pascal расширением pas, является программным модулем (unit), описывающим класс формы и все ее компоненты. Другой файл, имеющий тип dfm, описывает расположение всех компонент на форме, их свойства, а так же параметры самой формы – т.е. все то, что можно настроить при помощи инспектора объектов.
Пример файла dfm:
object Form1: TForm1
Left = 192
Top = 114
Width = 870
Height = 600
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 296
Top = 168
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
end
end
Что касается другой составляющей формы – файла pas, который мы, собственно и видим в паре с ее визуальным представлением, то в нем хранится описание формы как класса, а так же подпрограмм, типов и переменных, не являющихся частью формы как таковой, но по тем или иным соображениям помещенных в данный файл. Применительно к той же самой форме, содержащей лишь одну простую кнопку, pas-файл для нее будет выглядеть так, как представлено на листинге 11.2.