Ver Mensaje Individual
  #6  
Antiguo 10-04-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Reputación: 20
keyboy Va por buen camino
¿De cuántos itemes estamos hablando? Cuando se manejan muchos elementos (y muchos pueden ser unas decenas) estos controles funcionan mucho mejor en modo virtual. Si alguna vez has utilizado un DBGrid, por ejemplo, notarás que su rendimiento es óptimo independientemente de si tienes miles o millones de registros. Pero eso es así porque el componente realmente no guarda toda la información sino que solicita (al DataSet en el caso del DBGrid) sólo los registros que requiere mostrar en un momento dado, esto es, básicamente, sólo los que caben en la parte visual del control.

El ListView puede funcionar en modo virtual poniendo su propiedad OwnerData en true. En esta modalidad, uno no llena explícitamente el control con llamadas a Items.Add. Lo único que se le indica al control de inicio, es el número de elementos que debe manejar:

Código Delphi [-]
ListView.Items.Count := NumeroDeElementos;

Conforme nos desplazamos por la lista, el control solicita la información en el evento OnData:

Código Delphi [-]
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin

end;

El Item que se pasa como parámetro únicamente contiene un dato útil: Item.Index, el índice del elemento que debe proporcionarse.

Entonces, puedes guardar la información en una estructura más eficiente, como un TObjectList, dependiendo del tipo de datos que tengas. Con el Item.Index buscas el elemento que corresponda en tu estructura de datos y con eso llenas la información restante del objeto Item. Por decir algo:

Código Delphi [-]
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
  Item.Caption := TMiClase(MiLista[Item.Index]).Propiedad;
end;

Espero que esto ayude.

Bye
Responder Con Cita