![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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)
| ||