Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_N5_.doc
Скачиваний:
2
Добавлен:
24.04.2019
Размер:
126.46 Кб
Скачать

Общие свойства компонентов

1 Иерархия компонентов

Все компоненты Delphi порождены от класса TComponent, в котором инкапсулированы самые общие свойства и методы компонентов. Предком TComponent является класс TPersistent, который произошел непосредственно от базового класса TObject.

Класс TPersistent передает своим потомкам важный виртуальный метод

procedure Assign(Source: TPersistent);

с помощью которого, поля и свойства объекта Source копируются в объект, вызвавший метод Assign.

Обмениваться данными могут все наследники TPersistent независимо от того, находятся ли они в непосредственном родстве по отношению друг к другу или имеют единственного общего предка - TPersistent.

Класс TComponent служит базой для создания как видимых, так и невидимых компонентов.

Большинство видимых компонентов происходит от класса TControl. Два наследника этого класса - TWinControl и TGraphicControl определяют две группы компонентов отличающихся своей функциональностью. Компоненты – наследники TWinControl могут получать фокус ввода и данные с клавиатуры, а также размещать по верх себя другие компоненты - принадлежащие классу TControl.. К наследникам TWinControl относятся: TButton, TPanel, TEdit, TCheckBox и др. Компоненты – наследники TGraphicControl не имеют возможности принимать ввод с клавиатуры, по верх них нельзя располагать другие компоненты. К наследникам TGraphicControl относятся: TLabel, TImage, TBevel, и др.

Оконный ресурс - это специальный ресурс Windows, предназначенный для создания и обслуживания окон.

Оконный компонент в момент своего создания обращается к Windows с требованием выделения оконного ресурса и, если требование удовлетворено, получает так называемый дескриптор окна. TWinControl и его потомки хранят дескриптор окна в свойстве Handle.

Программист может использовать этот дескриптор для непосредственного обращения к API-функциям Windows в обход VCL.

Потомки TGraphicControl не требуют от Windows оконного ресурса, но они и не могут получать и обрабатывать Windows -сообщения - управляет такими элементами оконный компонент-владелец (например, форма), который является посредником между Windows и неоконными компонентами.

2 Имена и собственники компонентов

Класс TComponent включает в себя свойства и методы, общие для всех компонентов.

Свойство

property Name: TComponentName;

type TComponentName = String; // Delphi 32

type TComponentName = String[63]; // Delphi I

определяет имя компонента. Имя компонента строится по тем же пра­вилам, что и имена любых других объектов программирования - кон­стант, переменных, подпрограмм и т. д.: оно представляет собой пра­вильный идентификатор и должно быть уникальным в области своей видимости в программе. Так как компоненты помещаются на форму средой Delphi, каждый компонент автоматически получает создавае­мое средой имя, совпадающее с именем своего класса (без начальной буквы Т) и дополненное числовым суффиксом: Form1, Label2, RichEdit2 и т. д.

Впоследствии программист может переименовать компонент, чтобы сделать текст программы более «читабельным». При разработке собственных имен полезно выработать свою систему двух- или трехбуквенных префиксов, кодирующих тип компонента.

Например fm - для формы TForm, ib - для метки TLabel, ed - для редактора TEdit и т. п. Комбинируя префикс с мнемоническим именем, можно существенно улучшить читаемость программы и усилить кон­троль за правильным использованием свойств и методов компонента.

Например, оператор

IbOutput.Text := 'Текст';

сразу вызовет подозрение, т. к. префикс ib определяет компонент TLabel, который не имеет свойства или поля с именем Text. Свойство

property Tag: Integer;

определяет произвольный целочисленный параметр, который не используется Delphi и которым программист может распоряжаться по своему усмотрению. Любой компонент Delphi является собственностью другого компонента и, в свою очередь, может быть владельцем одного или нескольких компонентов. Такая зависимость компонентов друг от друга позволяет существенно упростить процесс управления ими. Например, чтобы уничтожить окно с включенными в него компонентами, достаточно вызвать деструктор окна: он поочередно вызовет деструкторы всех других компонентов, владельцем которых является компонент-окно, и таким образом полностью освободит выделенные окну ресурсы. Свойство

property Owner: TComponent;

указывает на владельца компонента (это свойство доступно только для чтения), а свойство

property ComponentIndex: Integer;

на положение компонента в массиве components своего владельца. Этот массив определяется свойством

property Components[Index: Integer]: TComponent;

и содержит список всех компонентов, которыми владеет данный компонент. Количество зарегистрированных в списке компонентов возвращает свойство

property ComponentCount: Integer;

Конструктор TComponet.Create имеет единственный параметр обращения:

constructor Create(AOwner: TComponent);

в котором компоненту передается ссылка на его владельца. В ходе выполнения конструктора компонент вставляет ссылку на себя в список Components своего владельца и изменяет содержимое собственного свойства Owner.

Для управления списком components предназначены следующие методы:

procedure DestroyComponents;

Вызывает поочередно деструкторы всех компо­нентов из списка Components и удаляет все ком­поненты из списка

function FindComponent(const AName: String): TComponent;

Отыскивает в списке компонент с именем AName и возвращает ссылку на него

procedure InsertComponent (AComponent: TComponent);

Вставляет компонент AComponent в конец списка Components

procedure RemoveComponent (AComponent; TComponent);

Удаляет компонент AComponent из списка