はじめに
Delphi には (Classic) Visual Basic のようなコントロール配列はありませんが、コントロールの配列にコントロールを割り当てる事で似たような事ができました。
今回は動的配列でそれをやってみます。
コード
TButton の動的配列を作るコードとなります。
テストは VCL アプリケーションで行いますが、FireMonkey でも考え方は同じです。
Delphi 2005 以降
Delphi 2005 以降だと配列コンストラクタが使えるので、次のような書き方ができます。
procedure TForm1.FormShow(Sender: TObject);
type
TBtnDynArray = array of TButton;
var
BtnArr: TBtnDynArray;
i: Integer;
begin
OnShow := nil;
BtnArr := TBtnDynArray.Create(
TButton.Create(Self),
TButton.Create(Self),
TButton.Create(Self)
);
for i:=Low(BtnArr) to High(BtnArr) do
with BtnArr[i] do
begin
Parent := Self;
Width := 96;
Height := 24;
Left := 12;
Top := i * 32 + 12;
Caption := Format('Button_%.2d', [Succ(i)]);
end;
end;
See also:
Delphi XE7 以降
Delphi XE7 以降だと配列定数式が使えるので、次のような書き方ができます。
procedure TForm1.FormShow(Sender: TObject);
var
BtnArr: array of TButton;
i: Integer;
begin
OnShow := nil;
BtnArr := [
TButton.Create(Self),
TButton.Create(Self),
TButton.Create(Self)
];
for i:=Low(BtnArr) to High(BtnArr) do
with BtnArr[i] do
begin
Parent := Self;
Width := 96;
Height := 24;
Left := 12;
Top := i * 32 + 12;
Caption := Format('Button_%.2d', [Succ(i)]);
end;
end;
後でコントロールを足す事もできます。
BtnArr := BtnArr + [TButton.Create(Self)];
with BtnArr[High(BtnArr)] do
begin
Parent := Self;
Width := 96;
Height := 24;
Left := 12;
Top := High(BtnArr) * 32 + 12;
Caption := Format('Button_%.2d', [Length(BtnArr)]);
end;
See also:
Delphi 10.3 Rio 以降
Delphi 10.3 Rio 以降だとインライン変数宣言と型推論ができるので、次のような書き方ができます。
procedure TForm1.FormShow(Sender: TObject);
begin
OnShow := nil;
var BtnArr := [
TButton.Create(Self),
TButton.Create(Self),
TButton.Create(Self)
];
for var i:=Low(BtnArr) to High(BtnArr) do
with BtnArr[i] do
begin
Parent := Self;
Width := 96;
Height := 24;
Left := 12;
Top := i * 32 + 12;
Caption := Format('Button_%.2d', [Succ(i)]);
end;
end;
See also:
おわりに
新しい機能を使うと便利な書き方ができるものですね。
See also: