|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Создать программно много компонентов
Всем привет! Добавляю чекбоксы в групбокс. Подскажите можно ли как-то добавить их в виде двумерного массива (мне нужно разместить 200 чекбоксов по 20 в строке из 10 строк). Кусок моего кода.
Код:
... var FPass: TFPass; NChB: TCheckBox; ... procedure TFPass.FormCreate(Sender: TObject); var i:integer; NChB: Array of TCheckBox; begin SetLength(NChB,i+1); SetLength(NChB,j+1); for i := 0 to 19 do begin NChB[i] := TCheckBox.Create(GroupBox2); NChB[i].Top:=80; NChB[i].Left:= 220+(i*35); NChB[i].Parent:=GroupBox2; NChB[i].Name:='NChB'+IntToStr(i+1); NChB[i].Caption:=IntToStr(i+1); NChB[i].Visible:=True; NChB[i].BringToFront; end; |
#2
|
|||
|
|||
Ну, у тебя почти получилось:
Код:
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; gbCheckboxes: TGroupBox; procedure Button1Click(Sender: TObject); private { Private declarations } ACB : Array [1..20,1..10] Of TCheckBox; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var I, J : Integer; begin For J := 1 To 10 Do For I := 1 To 20 Do Begin ACB[I,J] := TCheckBox.Create(Self); ACB[I,J].Width := ACB[I,J].Height + Self.Canvas.TextWidth('888'); ACB[I,J].Top := 16 + (J-1)*(ACB[I,J].Height+8); ACB[I,J].Left := 8 + (I-1)*(ACB[I,J].Width+8); ACB[I,J].Caption := IntToStr((J-1)*20 + I); ACB[I,J].Parent := gbCheckboxes; End; end; end. PS. Мне по кнопке удобнее отлаживать. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
crazyman (21.04.2017)
|
#3
|
|||
|
|||
Огромное спасибо за подсказку, но теперь подскажите как можно в своем дальнейшем коде обратиться к к конкретному чекбоксу.
|
#4
|
|||
|
|||
Точно так же, как они создаются:
Код:
... if ACB[1,1].Checked Then ... Если надо обращаться по порядковому номеру, то, например, через такую функцию: Код:
function TForm1.CheckBoxByNumber(N : Integer) : TCheckBox; var I, J : Integer; begin I := ((N-1) div 20) + 1; J := N - (I-1) * 20 Try Result := ACB[I,J]; Except Result := Nil; End; end; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
crazyman (22.04.2017)
|