Ver Mensaje Individual
  #5  
Antiguo 03-02-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
A ver si queda más claro.
Código Delphi [-]
type Tregistro = record
  Registro= record
   Nombre, Direccion: String;
    Fecha: TDateTime;
    end

type TCliente = class(Tobject)
   public 
      Datos:TRegistro
   end;

var  TLista :TobjectList;

implementation



procedure Tform1.Button1Click(sender:Tobject);
var c:TCliente;
   i:integer;
begin
  Lista := TobjectList.Create(true); //Creo la lista y la mantengo en memoria siempre
for i:=1 to 6 do //creo 6 clientes 
begin
  c := Tcliente.Create; // creo el cliente
  c.Datos.Nombre := 'pepe '+inttostr(i);
  c.DAtos.Fecha := Now()- i ; // la fecha con algunos dias menos
  // rellenas los datos;
  lista.add(c); // añadimos el cliente a la lista;
end;

end;

procedure Tform1.Close(..);
begin
  Lista.Free; // libero la lista y todos los clientes que tenga dentro.
end;

Para recorrer la lista de objetos:
Código Delphi [-]
  for i:=0 to Lista.count-1 do
    with TCliente(lista.items[i]) do
      memo1.lines.add(datos.Nombre);
Si te fijas, cada vez que accedo a la propiedad Lista.items, tengo que hacer un casteo, es decir, la Lista no sabe que tipo de objeto tiene dentro, se lo dices mediante el cast .... Tcliente(lista.items[i])


Para ordenar la lista, tienes que hacer una funcion simple de comparación de 2 Objetos.
Código Delphi [-]
function OrdenaFecha(a: Pointer; b: Pointer): Integer;
begin
  if TCliente(a).Fecha > TNota(b).DAtos.Fecha then
    Result := 1
  else if TCliente(a).Fecha < TNota(b).DAtos.Fecha then
    Result := -1
  else
    Result := 0;
end;

Y para ordenar usarías la orden:
Código Delphi [-]
   Lista.Sort(@OrdenaFecha);
Esto es algo rarito, se le da la direccion de memoria donde está la funcion de ordenación; a partir de aquí, la lista ya sabe como comparar 2 objetos, y ordena la lista entera

Si quieres ordenar por Nombre, Create una funcion OrdenaPorNombre que haga la comparación, y devuelva -1, 1 o cero.

Si en algun momento quieres quitar un cliente, puedes hacerlo así:
Código Delphi [-]
   Tcliente(lista.items[2]).Free;// quito el tercero en la lista

Espero te ayude.

Saludos
Responder Con Cita