Du machst es dir unnötig kompliziert.
I ist schon der Index für das Array und das Array kann man am Anfang gleich auf die richtige Länge setzen.
Wenn man den gerade erzeugten Button in eine Variable legt, erspart man sich den ständigen Zugriff auf das Array.
Das erkennen einer neuen Zeile geht auch einfacher.
Delphi-Quellcode:
var i, zeile, spalte: Integer;
AbstandX, OffsetX: Integer;
AbstandY, OffsetY: Integer;
Btn: TButton;
begin
SetLength(MyBtns, CONST_SOUNDBUTTONS);
AbstandX := 10; // Abstand der einzelnen Spalten
OffsetX := 25; // Abstand der ersten Spalte von links
AbstandY := 20; // Abstand der einzelnen Zeilen
OffsetY := 100; // Abstand der ersten Zeile von oben
zeile := 0;
spalte := 0;
for i := 0 to CONST_SOUNDBUTTONS - 1 do
begin
Btn := TButton.Create(Self);
MyBtns[I] := Btn;
Btn.Parent := TabSheet2;
Btn.Name := 'btnSound' + IntToStr(i);
//Btn.Caption := 'Sound ' + IntToStr(i+1);
// nur zum Ansehen der aktuellen Spalten- und Zeilenwerte
Btn.Caption := IntToStr(spalte) + '|' +
IntToStr(zeile);
Btn.Height := 25;
Btn.Width := 75;
Btn.Left :=
spalte * (AbstandX + Btn.Width) + OffsetX;
Btn.Top :=
zeile * (AbstandY + Btn.Height) + OffsetY;
Inc(Spalte);
if Spalte = 5 then
begin
Spalte:= 0;
Inc(Zeile);
end;
end;
end;