Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-08-2021
Ralevi Ralevi is offline
Miembro
 
Registrado: ago 2021
Posts: 20
Poder: 0
Ralevi Va por buen camino
Manejar un TList

Buenas, sigo experimentando.

Creo un form con varios Label y SpinBox, y uso Tlist para manejarlos.

Este es mas o menos el sistema:
Código Delphi [-]
   //----------------------------------------------------------------------------------------------------------------
   procedure ElProgramaX.FormCreate(Sender: TObject);

   Var
   Lista1,Lista2:Tlist;  
   Espin:TSpinBox;
   etiqueta:tlabel;
   x,idx1,idx2:integer;

   begin

   Lista1:=Tlist.Create;

   idx1:=Lista1.Add(label1);
   /...  Añado todos los Label 
   idx1:=Lista1.Add(labe20);

   Lista2:=Tlist.Create;

   idx2:=Lista2.add(SpinBox1);
   // ... Añado los TSpinBox
   idx2:=Lista2.add(SpinBox20);

   //Cargo Los Label desde un  Memo
   for x := 0 to MEMO1.Lines.Count-1 do
     begin
     Etiqueta:=Lista1.items[x];
     Etiqueta.Text:=MEMO1.LINES[X];
     end;
 
   // Aqui asigne los valores solo para comprobar el orden y que funcionaba 
   for x := 0 to MEMO1.Lines.Count-1 do
     begin
     Espin:=Lista2.items[x];
     Espin.value:=x;
     end;

   end;
   //----------------------------------------------------------------------------------------------------------------
En principio funciona bien, las consultas son:

-La estoy liando y hay métodos mas sencillos??

-La variable idx tiene que ser diferente para cada List o si le asigno valor 0 antes de asignar la segunda valdría?

-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?

Gracias anticipadas.

Última edición por ecfisa fecha: 12-08-2021 a las 00:39:09. Razón: Agregar etiquetas [DELPHI] al codigo
Responder Con Cita
  #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.275
Poder: 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
  #3  
Antiguo 12-08-2021
Ralevi Ralevi is offline
Miembro
 
Registrado: ago 2021
Posts: 20
Poder: 0
Ralevi Va por buen camino
Muchas gracias por una respuesta tan extensa.

Voy a experimentar todo lo que me comentas, ale ya tengo entretenimiento para unas tardes

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ordenar un TList elcigarra OOP 27 24-01-2009 00:22:34
Problemas con TList air_erik OOP 9 09-02-2008 22:49:27
Uso del Objeto TList aromero OOP 10 21-10-2005 17:30:11
Problemas con TList arantzal .NET 2 09-12-2004 09:14:37
TList HERNAN Varios 2 10-10-2003 03:47:59


La franja horaria es GMT +2. Ahora son las 12:09:27.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi