В приложениях VCL Forms форма является первичным контейнером для компонентов. Помимо формы, Delphi предлагает несколько других компонентов, которые могут содержать в себе другие компоненты. Такие компоненты называются контейнерными. Стандартными контейнерными компонентами являются TGroupBox и TPanel категории Standard, TScrollBox категории Additional (Дополнительные) и TPageControl категории Win32.
Как правило, группировать компоненты необходимо по двум причинам. Работа с группами компонентов на этапе проектирования будет более продуктивной, поскольку работать с группой компонентов можно как с одним модулем. А во время выполнения группы улучшают качество интерфейса пользователя. Использование некоторых контейнерных компонентов, таких как TGroupBox, позволяет улучшить внешний вид приложения. Например, в диалоговом окне Project Options (Параметры проекта) компонент TGroupBox используется для группирования связанных между собой параметров. Рамки Code generation (Генерация кода). Syntax options (Параметры синтаксиса). Runtime errors (Ошибки времени выполнения) и Debugging (Отладка), видимые в диалоговом окне, являются компонентами TGroupBox, каждый из которых содержит по нескольку флажков (рис. 11.20).
Чтобы добавить компоненты-потомки в контейнерный компонент, лучше всего сначала поместить контейнерный компонент в окно Designer Surface. Когда вы перемещаете компоненты в окно Designer Surface, они добавляются в контейнерный компонент в позицию указателя мыши. Если в окне Designer Surface нет дополнительных контейнерных компонентов, компоненты добавляются прямо на форму. Если ваша форма содержит несколько контейнерных компонентов, то разобраться с ними вам поможет окно Structure (Структура), показанное на рис. 11.21.
Рис. 11.20. Компоненты TGroupBox в диалоговом окне Project Options

Рис. 11.21. Отношения между родителями и потомками на форме

1.constructor Create(AOwner: T<a href="http://delphicomponent.ru/" title="Component" target="_blank">Component</a>);1.procedure TForml.ButtonlClick(Sender: TObject); begin2.Caption := 'The Owner of Buttonl is ' + Buttonl.Owner.Name; end;- Выберите компонент и вырежьте его в буфер обмена с помощью команды меню Edit^Cut (ПравкамВырезать).
- Выберите компонент панели в окне Designer Surface.
- Воспользуйтесь командой меню Edit^Paste (Правка^Вставить), чтобы добавить ранее вырезанную кнопку в панель.

01.unit Unit1;02.interface03.uses04.Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,05.Dialogs, StdCtrls, ExtCtrls;06.type07.TForm1 = class(TForm)08.Panel1: TPanel;09.Button1: TButton;10.procedure Button1Click(Sender: TObject);11.private12.{ Private declarations }13.public14.{ Public declarations }15.end;16.var Form1: TForm1;17.implementation18.{$R *.dfm}19.procedure TForm1.Button1Click(Sender: TObject);20.begin21.ShowMessage('Owner: ' + Button1.Owner.Name);22.ShowMessage('Parent: ' + Button1.Parent.Name);23.end;24.end.

Элементы управления обладают двумя примечательными свойствами, которые позволяют создавать высококачественные профессиональные интерфейсы пользователя, размеры которых можно изменять без ущерба их полезности или простоте использования.
Свойство Align позволяет выравнивать элемент управления в пределах его родительского элемента управления. Если вы выравниваете элемент управления относительно одной из сторон родительского элемента управления, то при изменении размеров родительского элемента управления размеры данного элемента будут изменяться автоматически. Если свойству Align присвоить значение alNone, то элемент управления не будет перемещаться, а также не будет изменять свои размеры при изменении размеров родительского компонента.
Использовать свойство Align удобно при работе с контейнерными элементами управления, которые необходимо растягивать от одной стороны родительского элемента управления в другую. Однако, некоторые элементы управления, например TButton, TCheckBox и им подобные, не имеют свойства Align. Для выравнивания этих элементов управления должно применяться свойство Anchors.
Свойство Anchors представляет набор из четырех значений, которые определяют, каким образом элемент управления закрепляется в родительском элементе управления.
Значением свойства Anchors по умолчанию является [akLeft, akTop). Элементы управления, в которых свойство Anchors имеет это значение, не изменяют своего местоположения или размеров во время выполнения. Например, свойство Anchors можно использовать в тех случаях, когда кнопка должна быть всегда закреплена в правой части формы. Чтобы кнопка оставалась там даже при изменении размеров формы, свойству Anchors кнопки необходимо присвоить значение [akTop, akRight], как показано на рис. 11.25. Чтобы изменить значения свойства, щелкните на значке + слева от свойства, чтобы развернуть список его значений, и выберите значения, которые вам необходимы.
Рис. 11.25. Свойство Anchors

