Ver Mensaje Individual
  #2  
Antiguo 12-08-2021
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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 Ver Mensaje
-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
    { Private declarations }
  public
    { Public declarations }
  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);     // buscar el componente `pòr el nombre
    if Assigned(comp) then                                  // si lo ha encontrado....
      listaLabels.Add(TLabel(comp));                     // lo añade a la lista
  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;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 12-08-2021 a las 09:41:03.
Responder Con Cita