![]() |
Colorear filas de un ListView
Hola a todos!
alguién sabe cómo colorear las filas de un ListView según una determinada condición? como por ejemplo: nombre calle pais los que viven en españa, pintar toda la fila de color verde, lo de brasil azul y asi.... :o gracias |
Puedes usar el evento OnCustomDrawItem del ListView:
Bye |
Hola de nuevo, gracias por la contestación. Lo he estado probando en builder
Código:
void __fastcall TForm1::ListViewCustomDrawItem(TCustomListView *Sender,el ejemplo: Código:
procedure TForm1.ListView1CustomDrawItem(Comento esto porque creo que el el evento OnCustomDrawItem del ListView, corregirme si me equivoco, sólo se puede llamar desde donde está creado el ListView, si es en el Form1, se llama desde el Form1. Pero el bucle for que he comentado antes, está en un método de una clase que está en otro unit distinto al que contiene el Form1, por tanto no se puede usar?? Qué otras opciones tengo para colorear las filas de un ListView que sea dentro del for ya que la variable cadena va machacando su valor en cada iteración? |
Creo que no estás enfocando correctamente el problema.
Un evento- como lo es OnCustomDrawItem -no es un método que deba llamarse desde ningún punto específico de tu código (se puede pero no se debe), sino que es el entorno quien se encarga de llamarlo cuando sea oportuno. Lo anterior, llevado al caso particular del pintado de un ListView, significa que tú no te encargas de pintar el control de manera explícita (como lo sería iterar con un ciclo sobre las filas, tratando de aplicar ese evento a cada fila). Tú simplemente le "dejas" al entorno las instrucciones de cómo pintar. Cuando el entorno requiera pintar una celda, llamará al evento OnCustomDrawItem, en caso de haber uno definido. Pero cuándo se debe pintar una celda en específico, lo determina ese entorno y no tu código. En resumen, tu código nunca llama al evento OnCustomDrawItem. En este evento deben estar las "instrucciones" necesarias para pintar cada celda. Si dichas instrucciones cambian por algún factor externo (el valor de una variable, por ejemplo) que está bajo tu control, entonces deberás llamar al método Refresh del control apenas cambies dicho factor. Con esto obligas al entorno a repintar el control y, por ende, a aplicar las instrucciones atendiendo a los nuevos valores. Bye |
Código:
void __fastcall TForm1::ListView1CustomDrawSubItem(TCustomListView *Sender, |
Wenas una vez más, sobre lo de :
Cita:
pero, el problema es que mi variable a tener en cuenta para pintar de un color u otro las filas de listview está dentro de un thread alojado en otro unit, ese thread se comporta como un bucle for, que, en cada iteración va cambiando la variable en cuestión, por tanto la forma que veo de colorear las filas del listview sería en el mismo Unit donde tengo el thread, por tanto no podría usar el evento OnCustomDrawItem. he intentado algo como: Código:
void __fastcall ThreadPackets::Execute()pero no me pinta nada y he visto por internet algo sobre el backcolor, pero en builder no está la opción de Form1->ListView->Backcolor? hay alguna forma? gracias |
| La franja horaria es GMT +2. Ahora son las 00:00:24. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi