Delphi. Панель Standard. Компонент GroupBox.

Компонент «GroupBox» предназначен для группировки на нём компонент, логически связанных между собой. Это позволяет зрительно сразу определить нужную группу компонент. Например:

Это компонент имеет небольшое количество свойств.

Свойство «Color».

Определяет цвет фона компонента. Например:

Свойство «Align».

Свойство Align управляет расположением компонента на форме, а также внутри компонентов-контейнеров, таких как Panel, GroupBox, PageControl, GridPanel и др.

Для примера расположим на форме компоненты следующим образом:

На группирующей панели с заголовком «GroupBox1 Для Edit» компоенты расположены просто для примера.

На панели с заголовком «GroupBox7» размещено 5 элементов «CheckBox». Они позволят в динамике рассмотреть, как влияет значение свойства «Align» на расположение компонентов на форме при различных значениях «Align» (alTop, alBottom, alLeft, alRight). По умолчанию. Align=alNone.

Значения свойства Align.

alNone Значение по умолчанию. Компонент будет расположен там, где его «положит» программист. Размеры компонента также устанавливаются независимо (тождественно alCustom).

alBottom — Компонент прижмётся к нижнему краю Формы и растянется по всей её ширине. Таким образом, мы не сможем непосредственно управлять шириной компонента как таковой, она всегда будет следовать за шириной Формы, как бы она не изменялась.

alClient — Компонент займёт всё доступное пространство на Форме. В частности, если на Форме не будет других компонентов, то компонент GroupBox растянется по всей форме, и в дальнейшем его размеры как по ширине, так и по высоте также всегда будут следовать за изменениями размеров Формы.

alLeft — Компонент прижмётся к левому краю формы и растянется по всей её высоте, и в дальнейшем изменение значения высоты компонента будут следовать за изменениями высоты формы.

AlRight — Компонент прижмётся к правому краю формы и растянется по всей её высоте, и в дальнейшем изменение значения высоты компонента будут следовать за изменениями высоты формы.

alTop — Компонент прижмётся к верхней границе Формы и растянется по всей её ширине, и в дальнейшем изменение значения ширины компонента будет следовать за изменениями ширины Формы.

Обработка кликов по чекбоксам.

Для обработки кликов по чекбоксам напишем следующий код:

type tar=array[1..5,1..4] of integer; //объявляем массив

var

ar:tar; //создаём глобальную переменную
implementation

{$R *.dfm}

procedure TForm1.CheckBox3Click(Sender: Tobject);
begin
//Sender — ссылка на CheckBox3
//
TcheckBox(Sender) — приводим ссылку на объект «CheckBox3» от типа
«Tobject» до типа «TcheckBox». Это приём явного приведения типа.
Аналогичный результат можно получить, используя оператор «as»: (Sender as
TcheckBox). В результате использование TcheckBox(Sender) эквивалентно
использованию CheckBox3.

if TCheckBox(Sender).Checked=true then GroupBox1.Align:=alLeft else
begin
GroupBox1.Align:=alnone;
GroupBox1.Top:=ar[1,1];
GroupBox1.Left:=ar[1,2] ;
GroupBox1.Width:=ar[1,3];
GroupBox1.Height:=ar[1,4];
end;
end;

procedure TForm1.CheckBox4Click(Sender: Tobject);
begin
if TCheckBox(Sender).Checked=true then GroupBox2.Align:=alTop else
begin
GroupBox2.Align:=alnone;
GroupBox2.Top:=ar[2,1];
GroupBox2.Left:=ar[2,2] ;
GroupBox2.Width:=ar[2,3];
GroupBox2.Height:=ar[2,4];
end;
end;

procedure TForm1.CheckBox5Click(Sender: Tobject);
begin
if TCheckBox(Sender).Checked=true then GroupBox3.Align:=alLeft else
begin
GroupBox3.Align:=alnone;
GroupBox3.Top:=ar[3,1];
GroupBox3.Left:=ar[3,2] ;
GroupBox3.Width:=ar[3,3];
GroupBox3.Height:=ar[3,4];
end;
end;

procedure TForm1.CheckBox6Click(Sender: Tobject);
begin
if TCheckBox(Sender).Checked=true then self.GroupBox4.Align:=alRight else
begin
GroupBox4.Align:=alnone;
GroupBox4.Top:=ar[4,1];
GroupBox4.Left:=ar[4,2] ;
GroupBox4.Width:=ar[4,3];
GroupBox4.Height:=ar[4,4];
end;
end;

procedure TForm1.CheckBox7Click(Sender: Tobject);
begin
if TCheckBox(Sender).Checked=true then self.GroupBox5.Align:=alBottom else
begin
GroupBox5.Align:=alnone;
GroupBox5.Top:=ar[5,1];
GroupBox5.Left:=ar[5,2] ;
GroupBox5.Width:=ar[5,3];
GroupBox5.Height:=ar[5,4];
end;
end;

Таким образом, если на форме находятся компоненты с различными свойствами Align, то компоненты будут располагаться по следующим правилам:

  • Главенствуют значения alBottom и alTop. Компонента с этими свойствами расположатся сверху и снизу формы и растянутся на всю ширину. Если компоненты со свойствами alBottom и alTop пересекаются, то их положение настраивается кнопками Send To Back и Bring To Front.
  • Далее пространство захватывают компоненты со свойствами alLeft и alRight . Они приклеятся к левому и/или правому краю формы, а по высоте займут только то пространство, которое им оставили компоненты со свойствами alBottom и alTop. При пересечении компонентов с alLeft и alRight действует аналогичное правило.
  • Компонент же со свойством alClient займёт оставшийся прямоугольник свободного места.

Изменение расположения компонет в зависимости от свойства «Align».

Свойство Ancor.

Это свойство «привязывает» края компонента к краям формы. В результате при изменении размеров формы изменяются размеры компонента. Но, при выставленных значениях свойства «Ancor» расстояние от края формы до края компонента сохраняется.

Значения свойства по умолчанием:

Посмотрим, как ведёт себя компонент.

Для этого разместим на форме GroupBox:

Внутри компонента поместим компонент «RadioGroup» с четырьмя радиокнопками: 1) нет привязки; 2) привязка к левому краю формы и к верхнему краю формы; 3) привязка к правому краю и к низу; 4) все края компонента привязаны.

В обработчик клика по радиокнопке поместим код:

procedure TForm1.RadioGroup1Click(Sender: Tobject);
begin
with GroupBox1 do
case RadioGroup1.ItemIndex of
0:begin Anchors:=[]; end;
1:begin Anchors:=[akLeft,akTop]; end;
2:begin Anchors:=[akRight,akBottom]; end;
3:begin Anchors:=[akLeft,akTop,akRight,akBottom]; end;
end;

end;

Здесь, чтобы не писать каждый раз выражение «GroupBox1.Anchors», мы используем оператор «with … do».

Далее, в зависимости от номера выбранной радиокнопки, назначаем значение свойству «Anchors».

Изменение положения компонента относительно формы с помощью свойства «Anchors».

Контекстное меню для «GroupBox».

К компоненту «GroupBox» (как и к другим визуальным компонентам) можно перивязать контекстное меню «PopupMenu», то есть меню, вызываемое щелчком правой кнопки по компоненту. Такое меню часто ещё называют высплывающим.

Контекстное меню является невизуальным компонентом. Расположим его на форме:

Пункты меню вводятся в редакторе, вызываемом двойным щелчком по изображению компонента, или с помощью свойства «Items».

Текст пункта меню формируется в свойстве «Caption» и появляется в строке меню в редакторе после нажатия «Enter».

Таким образом сформируем:

Обработка щелчков по пунктам всплывающего меню.

Обработчик клика по пункту меню вызывается двойным щелчком по пункту меню.

Тогда будем иметь:

procedure TForm1.N1Click(Sender: Tobject);
begin
GroupBox2.Anchors:=[];
end;

procedure TForm1.N2Click(Sender: Tobject);
begin
GroupBox2.Anchors:=[akLeft,akTop];
end;

procedure TForm1.N3Click(Sender: Tobject);
begin
GroupBox2.Anchors:=[akRight,akBottom];
end;

procedure TForm1.N4Click(Sender: Tobject);
begin
GroupBox2.Anchors:=[akLeft,akTop,akRight,akBottom];
end;

Замечание. Каждая строка является самостоятельным невизуальным компонентом и имеет имя «N1», «N2», «N3» и так далее, что видно из кода:

TForm1 = class(TForm)
GroupBox2: TgroupBox;
PopupMenu1: TpopupMenu;
N1: TmenuItem;
N2: TmenuItem;
N3: TmenuItem;
N4: TmenuItem;


procedure N1Click(Sender: Tobject);
procedure N2Click(Sender: Tobject);
procedure N3Click(Sender: Tobject);
procedure N4Click(Sender: Tobject);
private
{ Private declarations }
public
{ Public declarations }
end;

Последнее, что надо сделать — это привязать «PopupMenu» к конкретному компоненту. В нашем случае — это «GroupBox2».

Это делается через свойство «PopupMenu» компонента «GroupBox2»:

На этом завершим рассмотрения компонента «TgroupBox».

***

Обновлено: 29.07.2021 — 15:58

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *