FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
TListview y añadir elementos...
Buenas!!
Pues nada, tengo un codigo que me va LENTISIMO y todo en la parte en la que añado los elementos a mi TListview... Lo hago así:
No tengo ni idea como puedo hacerlo mas rapido el Tit.... pero es tremendamente lento ... Y por cierto, el primer while es MUY rapido así que no me digais que será por eso por que no... tengo más que debugeado que el retardo enorme está en la parte de "TiT := comparacionaeservista.Items.Add;"... Hay otra forma mejor? Gracias!! Vale, si, ya se que hago muchos "application.ProcessMessages;", pero cuando no los hago va igual de lentro y además necesito hacerlo por que no puedo dejar la aplicación en modo colgado... Muchas gracias... Última edición por lag_0 fecha: 09-04-2008 a las 15:28:24. |
#2
|
|||
|
|||
Hola...
Prueba haciendo:
Saludos... |
#3
|
||||
|
||||
Nada T__________T igual de lento a nadie se le ocurre otra posible solución porfavor ?
Muchas Gracias de todos modos maeyanes... Última edición por lag_0 fecha: 10-04-2008 a las 15:53:04. |
#4
|
||||
|
||||
Ains....
Es una faena no conocerse esos métodos También están en ListBox.Items... y creo que en todo lo que se llama "Items". Salu2 Edito: vale, no sé cómo no vi la respuesta de maeyanes Añado: ¿y si quitas el ProcessMessages? Última edición por ixMike fecha: 10-04-2008 a las 16:21:15. Razón: ceguera |
#5
|
||||
|
||||
Cita:
|
#6
|
|||
|
|||
¿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:
Conforme nos desplazamos por la lista, el control solicita la información en el evento OnData:
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:
Espero que esto ayude. Bye |
#7
|
||||
|
||||
Cita:
Muchas gracias y un saludo. |
#8
|
|||
|
|||
Revisa la siguiente liga: http://www.marteens.com/trick31.htm.
En ella Ian Marteens da unos consejos para cargar datos en un ListView. Espero te ayude. |
#9
|
||||
|
||||
Nada...no hay forma humana... esto va lento a más no poder, como 3 minutos para poner todos los items en mi portatil y en un servidor con 4 CPU's, 4 GB's de RAM etc etc (vamos la hostia) tarda como 4 veces más que en mi mierda de portatil.... una burrada inexplicable... no se que puede estar pasando ...
alguna idea..? Gracias |
#10
|
||||
|
||||
¿Intentaste lo del modo virtual? Aquí tengo un par de ejemplos de ListView para mostrar archivos de una carpeta. Uno en modo normal y el otro en modo virtual. Pruébalos abriendo una carpeta con muchos archivos como c:\windows\system32 y ve la diferencia.
// Saludos |
#11
|
||||
|
||||
Cita:
Saludos
__________________
|
#12
|
||||
|
||||
Claro, solo has de manejar la imagen que pinta, apartir de ese codigo (muy bueno por cierto) no es demasiado complicado, o siempre puedes dibujar en on draw item...
|
#13
|
||||
|
||||
Me acabo de dar cuenta que el problema está en las comparaciones....
Uf... esto es lo peor... Solo son cadenas de texto qeu se comparan, además 4 cadenas con otras 4 por cada item que añado y tarda..... UF COMO TARDA!!! no entiendo qeu peude estar pasando, incluso dejando un simple if de las length se demora el additem un segundo por cada item... lo cual no es normal T________T.... Tiene alguna explicación? Pego el codigo...
Alguna idea? T_T muchas gracias... Última edición por lag_0 fecha: 16-04-2008 a las 18:05:13. |
#14
|
||||
|
||||
Cita:
Modo Virtual (OwnerData:=True) Ahora bien, según interpreto el código expuesto por roman, el dato importante para trabajar con el ListView es el Item.Index, es el principal, en base a la lista creada con los elementos (la cantidad la muestro con AllocBy) en el evento OnData, cargo los nombres de cada elemento (Item.Caption). Para dibujar un thumbnail de cada elemento tendría mi código en:
Pero que pasa con la propiedad OwnerDraw?. En el evento OnDrawItem tendría que: 1. Generar el thumbnail del elemento 2. Dibujar el thumbnail del elemento 3. OwnerDraw True es correcto? Como sería un ejemplo de generar un thumbnail de un elemento de la lista y agregarlo al ListView? PD: me resulta muy interesante todo este tema ya que, me gustaria generar un componente derivado del TShellListView, por el solo hecho de añadirle la propiedad ViewStyle [vsThumbs] + [ vsIcon, vsList, vsReport, vsSmallIcon] y poder visualizar como Thumbnails, estilo Explorardor de Windows Saludos y gracias
__________________
Última edición por MaMu fecha: 17-04-2008 a las 01:10:46. |
#15
|
||||
|
||||
Mi idea para eso:
-añade un timagelist.... -Cuando exploren un directorio haces una búsqueda de todos los JPG y bmp y demás cargando cada imagen en el objeto que has creado antes... asegurate de hacerlo por orden alfabetica y de vaciar el timagelist antes de cargar... -Cargas el listview con los ficheros del directorio ordenas por orden alfabetica el listview. -Te aseguras de que el imagelist esté asociado al listview... -pones el image index el indice de cada elemento y como son alfabeticos encajarán... Si quieres que la propiedad con la que se vea no sea icons solo tendrás que pintar la imagen asociada al elemento por imageindex al tamaño que tu quieras y como quieras... no es muy dificil prueba primero cambiar el font, color de texto etc del elemento y verás como sabiendo hacer eso llegas a cualquier sitio. y listo. |
#16
|
||||
|
||||
Cita:
Saludos
__________________
|
#17
|
||||
|
||||
La verdad es que no entiendo como pasarlo a modo virtual, ya que quiciera probarlo puesto a que quiero trabajaron con centenares de imagenes.
Con un Form, un Button, un ImageList, un ListView y un Image, les dejo mi codigo para visualizar como thumbnails las imagenes jpg contenidas en una carpeta. Alguien me ayuda a como pasarlo a modo virtual??? quizas asi me de cuenta. Les agradezco de antemano. Me baje los ejemplos, y aun asi no he conseguido pararlo a virtual, me resulto interesante el comentario de "KeyBoy" Aqui les va mi codigo, a ver si me ayudan a modificarlo:
Muchas Gracias y Saludos
__________________
Última edición por MaMu fecha: 29-07-2008 a las 17:29:33. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Añadir elementos sin repetir | MaMu | Varios | 12 | 21-10-2015 22:17:40 |
XML y sus elementos | papulo | Varios | 5 | 01-03-2007 11:13:30 |
TListView | calogero | Varios | 0 | 18-01-2007 18:16:45 |
Tlistview | Yenifer | Varios | 1 | 18-08-2004 17:33:44 |
Problemas al añadir elementos a una Lista en una aplicación tipo consola | judoboy | Varios | 2 | 09-06-2003 14:58:48 |
|