![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#9
|
||||
|
||||
|
Vamos a ver:
andres1569 indica un punto crucial: ver las imágenes aleatoriamente y no secuencialmente. marcguillot sugiere optimizar la visualización cargando imágenes por adelantado. Ambos puntos son buenos pero algo incompatibles pues si seguimos la idea de andres1569 será difícil saber cuáles imágenes serán las próximas a cargar y si seguimos la idea de marcguillot será difícil dejar el acceso secuencial. Sin embargo, ¿por qué no dejar que Windows se encargue de cuándo cargar las imágenes y aún así permitir un acceso aleatorio? La propuesta que hago es usar un ListView en modo virtual Código:
OwnerData := true; Código:
ListView.Items.Count := 1000000; // ¡Incluso más si lo desean! Código:
Item.Caption := Lista[Item.Index]; Ahora bien, ¿de dónde y cuándo sacamos la imágen de cada ítem? Llenar un ImageList con todas las imágenes es desde luego impensable ya que justamente deseamos evitar cargar todas las imágenes al mismo tiempo. Pero podemos usar el evento OnCustomDrawItem del ListView para cargar la imágen y dibujarla: Código:
var
Rect: TRect;
Bmp: TBitmap;
X, Y: Integer;
begin
// Cargar la imagen
Bmp := TBitmap.Create;
Bmp.LoadFromFile('ruta al archivo' + Item.Caption);
// Obtener el rectángulo que ocupa el icono del item
ListView_GetItemRect(ListView.Handle, Item.Index, Rect, LVIR_ICON);
// Para centrar la imagen en el área del icono
X := Rect.Left + ((Rect.Right - Rect.Left) - Bmp.Width) div 2;
Y := Rect.Top + ((Rect.Bottom - Rect.Top) - Bmp.Height) div 2;
ListView.Canvas.Draw(L, T, Bmp);
Bmp.Free;
Entonces sólo hay que asignar al ListView un ImageList con sus propiedades Width y Height en 160. El ImageList no lo llenamos, es sólo para que el área de los iconos sea adecuada. No lo he probado a consciencia más que nada porque en estos momentos no dispongode 1000 imágenes .Lo que hice fue usar una sóla imagen cargando la lista de nombres de archivos con el mismo nombre de manera que realmente se está cargando cada vez la imágen. Lo probé con 100,000 items y funciona bien. La prueba final será con las 1000 mágenes distintas pero creo que vale la pena intentarlo. // Saludos Última edición por roman fecha: 10-10-2003 a las 23:23:28. |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|