logo search
Лекции програм_new_последняя версия1

Родительские и дочерние компоненты.

В библиотечном модуле Controls описан класс TControl и его потомок TWinControl. Как уже отмечалось, некоторые из наследников TControl обладают дескрипторами окон и способны получать и обрабатывать Windows – сообщения, другие окон не имеют, но обязательно включаются в состав оконных компонентов, которые управляют ими, согласуясь с требованиями (сообщениями) Windows. Оконные элементы управления обладают специальной оконной функцией, в которую Windows посылает управляющие сообщения (например, извещения о манипуляции пользователя с мышью или о нажатии им клавиш клавиатуры). Такие элементы управления называются родительскими, а связанные с ними неоконные компоненты – дочерними.

Обязательным требованием Windows является визуальная синхронизация дочерних компонентов: они не могут выходить из границ своего родителя и появляются и исчезают вместе с ним. Иными словами, родитель с дочерними компонентами рассматривается Windows  как единое целое. Класс TControl определяет свойство Parent, которое содержит ссылку на родительский компонент:

Property Parent: TWinControl;

Внимание! Это свойство не следует путать с собственником Owner:

Owner создал компонент (не обязательно видимый), а Parent управляет видимым компонентом.

Поскольку конструктор TComponent.Create не изменяет Parent (в родительском классе TComponent такого свойства нет), то при создании видимых компонентов на этапе прогона программы это свойство необходимо изменять программно. Например, следующий обработчик события OnCreate формы Form1 вставит надпись «Дочерний элемент» в левый верхний угол формы:

procedure TForm1.FormCreate(Sender: TObject);

var

Label1:TLabel;

begin

Label1:= TLabel.Create(Self);

Label1.Parent:=Self;

Label1.Caption:='Дочерний элемент';

end;

Если убрать оператор

Label1.Parent:=Self;

то метка Label1 никогда не узнает о том, что пришла пора прорисовать себя на экране и ее текст не будет виден. Наоборот, изменение свойства Parent подключает метку к списку дочерних элементов формы, и оконная функция формы обратится к нужному методу метки, чтобы заставить ее появиться на экране в момент появления самой формы.