Щелчок по первой кнопке должен создавать группу элементов управления - надпись, поле ввода и кнопку (вторая кнопка служит для удаления группы элементов). Желательно установить для размещенных кнопок выравнивание по нижнему краю.
Щелчок по кнопке из группы должен приводить к увеличению значения в соответствующем поле ввода. Элементы в группах должны размещаться слева направо - сначала надпись, затем поле ввода, затем кнопка для увеличения значения. Сами группы должны размещаться сверху вниз по всей ширине формы.
Алгоритм:
Описываем структуру, включающую в себя элементы управления (в моем примере это надпись, поле ввода и кнопка) с заданным выравниванием и панель , на которой они будут сгруппированы.
Описываем массив элементов этой структуры.
Ставим в соответствие щелчку по первой кнопке создание нового элемента, а щелчку по второй удаление элемента интерфейса.
Создание нового элемента проводим в следующем порядке: вызов конструктора, установка выравнивания. Подключаем элемент управления к циклу событий родителя, сначала группу контролов к панели, затем панель стыкуем с формой. Удаление элемента проводим в обратном порядке.
У вас должен получится примерно такой код:
- Код: Выделить всё
- unit udynelems;
 {$mode objfpc}{$H+}
 interface
 uses
 Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
 StdCtrls, ExtCtrls;
 type
 { TForm1 }
 groupElems = record
 gB : TButton;
 gL : TLabel;
 gI : TEdit;
 gP : TPanel;
 end;
 TForm1 = class(TForm)
 Button1: TButton;
 Button2: TButton;
 procedure Button1Click(Sender: TObject);
 procedure Button2Click(Sender: TObject);
 procedure FormClick(Sender: TObject);
 procedure FormCreate(Sender: TObject);
 private
 { private declarations }
 public
 { public declarations }
 G : array[1..255] of groupElems;
 cntBtn : byte;
 end;
 var
 Form1: TForm1;
 implementation
 { TForm1 }
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 cntBtn:=cntBtn+1;
 with G[cntBtn] do
 begin
 gP:=TPanel.Create(Self);
 gB:=TButton.Create(Self);
 gI:=TEdit.Create(Self);
 gL:=TLabel.Create(Self);
 gP.Caption:='';
 gI.Text:='0';
 gL.Caption:='Подпись '+IntToStr(cntBtn);
 gB.Caption:='Кнопка '+IntToStr(cntBtn);
 gI.Align:=alLeft;
 gI.Parent:=gP;
 gL.Align:=alLeft;
 gL.Parent:=gP;
 gB.Align:=alClient;
 gB.Parent:=gP;
 gP.Align:=alTop;
 gP.Height:=24;
 gP.Parent:=Form1;
 gB.OnClick:=Form1.OnClick;
 end;
 end;
 procedure TForm1.Button2Click(Sender: TObject);
 begin
 if cntBtn=0 then exit;
 with G[cntBtn] do
 begin
 gB.Parent:=NIL;
 gI.Parent:=NIL;
 gL.Parent:=NIL;
 gB.Free;
 gI.Free;
 gL.Free;
 gP.Parent:=NIL;
 gP.Free;
 end;
 dec(cntBtn);
 end;
 procedure TForm1.FormClick(Sender: TObject);
 var i : byte;
 begin
 if Sender = Form1 then exit;
 for i:=1 to cntBtn do
 if g[i].gB = Sender then
 g[i].gI.Text:=IntToStr(1+StrToInt(g[i].gI.Text));
 end;
 procedure TForm1.FormCreate(Sender: TObject);
 begin
 cntBtn:=0;
 end;
 initialization
 {$I udynelems.lrs}
 end.
Откомпилированный бинарник: http://narod.ru/disk/3712250001/dynelems.exe.html
P.S. По многочисленным просьбам доброжелателей убрал рекламу. Не нравится, не имеет смысла, не работает - удаляйте thread, mrOk?





