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); for i:=1 to 6 do begin
c := Tcliente.Create; c.Datos.Nombre := 'pepe '+inttostr(i);
c.DAtos.Fecha := Now()- i ; lista.add(c); end;
end;
procedure Tform1.Close(..);
begin
Lista.Free; 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;
Espero te ayude.
Saludos