Оконные не оконные

Управления

 

(TWinControl) (TGraphicControl)

(например TButton,TForm) (напримерTLabel)

 

Объекты класса TWinControl называют оконными элементами управления. Методов и свойств у них много, все они наследуются визуальными компонентами для которых TControl и TWinControl являются абстрактными предками.

Например, пусть элемент управления пока не может быть показан на экране, однако TControlуже имеет для него свойства для его расположения:

 

property BoundsRect:TRect . . . .

property ClientRect:TRect . . . .

 

Первое определяет прямоугольник, внутри которого будет расположен сам элемент управления. Второе свойство определяет клиентскую область – прямоугольник, внутри которого размещаются другие (дочерние) элементы.


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

В библиотечном модуле 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);