Что нового?

Группировка кнопок

Ирина

Новичок
Суть вопроса, как можно кнопки 1, 2, 3 и 6, 7, 8 сгруппировать, чтобы не прописывать каждую в отдельности. Вот примерно такой конструкции:

Кнопки 1, 2, 3 - группа 1
Кнопки 6, 7, 8 - группа 2
По нажатию Button А:
группа 1 - Отображаются;
группа 2 - Скрываются;
По нажатию Button B:
группа 1 - Скрываются;
группа 2 - Отображаются;
 

Nemko

Старожил
Супер модератор
Ирина, извините что пример на Inno (нет Делфи да и языки схожи). А что если сделать массив кнопок, и потом в процедуре прогонять через цикл, а на группы разделить оператором case of ?

Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={sd}\My Application

[Code]
var
  OneGroup, TwoGroup: TButton;
  ButtonGroup: array [1..6] of TButton;

procedure HideOrShowButtons(aCount: Integer);
var
  i: Integer;
begin
case aCount of
  1: begin
    for i:=1 to 3 do begin ButtonGroup[i].Visible:=True;
end;
    for i:=4 to 6 do begin ButtonGroup[i].Visible:=False;
 end;
end;
  2: begin
    for i:=1 to 3 do begin ButtonGroup[i].Visible:=False;
end;
    for i:=4 to 6 do begin ButtonGroup[i].Visible:=True;
   end;
  end;
 end;
end;

procedure OnClick(Sender: TObject);
begin
 case Sender of
  OneGroup: HideOrShowButtons(1);
  TwoGroup: HideOrShowButtons(2);
 end;
end;

procedure InitializeWizard;
var
  i: Integer;
begin
with WizardForm do
begin
  Position:=poScreenCenter;
  NextButton.Width:=0; OuterNotebook.Hide;
  InnerNotebook.Hide; Bevel1.Hide; Bevel.Hide;
end;

for i:=1 to 3 do begin
  ButtonGroup[i]:=TButton.Create(WizardForm);
  ButtonGroup[i].Parent:=WizardForm;
  ButtonGroup[i].SetBounds(ScaleX(10), ScaleY(i*30-20), ScaleX(100), ScaleY(25));
  ButtonGroup[i].Caption:='Button '+IntToStr(i);
end;

for i:=4 to 6 do begin
  ButtonGroup[i]:=TButton.Create(WizardForm);
  ButtonGroup[i].Parent:=WizardForm;
  ButtonGroup[i].SetBounds(ScaleX(120), ScaleY(ButtonGroup[i-3].Top), ScaleX(100), ScaleY(25));
  ButtonGroup[i].Caption:='Button '+IntToStr(i);
end;

OneGroup:=TButton.Create(WizardForm);
with OneGroup do
begin
  Parent:=WizardForm;
  SetBounds(ScaleX(10), ScaleY(120), ScaleX(100), ScaleY(25));
  Caption:='Button A';
  OnClick:=@OnClick;
end;

TwoGroup:=TButton.Create(WizardForm);
with TwoGroup do
begin
  Parent:=WizardForm;
  SetBounds(ScaleX(120), ScaleY(120), ScaleX(100), ScaleY(25));
  Caption:='Button B';
  OnClick:=@OnClick;
end;
  HideOrShowButtons(1)
end;
 
Последнее редактирование:

Timick

Старожил
Nemko, а зачем так сложно?))

Просто работаем с Panel1 и Panel2...

Код:
Procedure TMainForm.Button_AClick(Sender: TObject);
begin
  if not Panel1.Visible then Panel1.Visible := True;
  if Panel2.Visible then Panel2.Visible := False;
end;

Procedure TMainForm.Button_BClick(Sender: TObject);
begin
  if not Panel2.Visible then Panel2.Visible := True;
  if Panel1.Visible then Panel1.Visible := False;
end;
 

Вложения

Сверху