Hay varias cosas a comentar, sin saber muy bien para qué quieres utilizar la estructura, sí que hay cosas que puedes mejorar.
Se me ocurre que puedes usar listas específicas (usando genéricos TList<T>):
Código:
var
listaLabels:TList<TLabel>;
listaSpinBox:TList<TSpinBox>;
begin
listaLabels := TList<TLabel>.Create;
listaSpinBox := TList<TSpinBox>.Create;
Cita:
Empezado por Ralevi
-Como todas las variables se declaran en el procedimiento FormCreate no se podrá acceder a los datos desde otra parte del código. ¿Se podria declarar en un procedimiento externo?
|
Los elementos (variables, objetos,...) que necesites utilizar desde otros procedimientos del pformulario, puedes definirlos en la parte privada de la clase. Al final de la clase del formulario tienes esto:
Código Delphi
[-]
....
procedure FormCreate(Sender: TObject);
private
public
end;
Lo que definas en el
private sólo es accesible desde dentro de esta unit, lo que definas en la parte
public será accesible desde otras units.
Para añadir los
Labels y los
Spinbox a las listas puedes usar un bucle
FOR y utilizar el método
FindComponent que te permite acceder a un componente a partir del nombre.
Código Delphi
[-]
var
comp:Tcomponent;
i:integer;
begin
...
for i := 1 to 20 do begin
comp := FindComponent('Label' + i.ToString); if Assigned(comp) then listaLabels.Add(TLabel(comp)); end;
En cuanto a lo que comentas de la variable idx, siplemente es la posición en que el elemento se añade a la lista. Como en este caso no te interesa esa información no hare falta ni que la asignes.
Código Delphi
[-]
Lista1.Add(Label1);
o
listaLabels.Add(TLabel(comp));
Si vas a usar un for para recorrer los componentes, puedes usar el mismo, incluso para asignar el texto también.
Algo así:
Código:
var
i: Integer;
comp:Tcomponent;
listaLabels:TList<TLabel>;
listaSpinBox:TList<TSpinBox>;
begin
// Lista1 := Tlist.Create;
listaLabels := TList<TLabel>.Create;
listaSpinBox := TList<TSpinBox>.Create;
for i := 1 to 20 do begin
// Buscar el Label por nombre
comp := FindComponent('Label' + i.ToString);
// Si lo ha encontrado, lo añadimos a la lista...
if Assigned(comp) then begin
listaLabels.Add(TLabel(comp));
// asiganr el texto del memo
TLabel(comp).Text := Memo1.Lines[i];
end;
// Buscar el spinbox por nombre (SpinBox1, SpinBox2, SpinBox3,...
comp := FindComponent('SpinBox' + i.ToString);
// Si lo ha encontrado, lo añadimos a la lista...
if Assigned(comp) then
listaSpinBox.Add(TSpinBox(comp));
end;