![]() |
ListView en modo virtual
Hola amigos, alguien sabe porque al rellenar el ListView en el evento ListView1Data como muestro a cuntinuacion me incrementa los numeros de una variable integer de dos en dos.?
var Form16: TForm16; i : integer; implementation procedure TForm16.FormCreate(Sender: TObject); begin ListView1.OwnerData:=True; ListView1.Items.Count:=100; procedure TForm16.ListView1Data(Sender: TObject; Item: TListItem); begin inc(i); Item.Caption:=IntToStr(i); end; |
--------------------
|
El evento se llama cuando cualquier item tiene que redibujarse en pantalla, asi que no puedes asignar los valores a los items dentro de ese evento, confiando en que se llame solo una vez por elemento y que ademas se llamen en el orden correcto.
Por ejemplo si el listview estuviese "medio" tapado por algun otro control o ventana verias que el evento solo seria llamado para aquellos elementos "visibles". Mejor iinicializa todos los elementos del listview con un bucle en el oncreate del form por ejemplo. Saludos |
Gracias por tu respuesta Nick
Lo que intento es llenar el ListView con los bytes de un archivo y este metodo es el mas rapido cuando el archivo es muy grande. El problema es lo que he comentado antes, me muestra los bytes de dos en dos. Ejemplo: BYTES (BIEN) BYTES (EN LISTVIEW) ------------- --------------------- 125 125 200 254 254 14 95 100 14 36 100 La muestra de codigo anterior era para simplificar. Adjunto parte de lo que tengo hecho. procedure TForm16.ListView1Data(Sender: TObject; Item: TListItem); var byte:Integer; begin byte:= LeerByte; Item.Caption:=IntToStr(byte); end; LeerByte es una funcion que lee los bytes del archivo. |
La franja horaria es GMT +2. Ahora son las 21:12:32. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi