PDA

Ver la Versión Completa : Listview vsReport : Como pintar parejas de filas de un solo color


wvidela
16-05-2005, 22:10:40
Hola Amigos,

He buscando bastante en el grupo, pero no he podido solucionar mi
problema:
Tengo un listview donde muestro parejas de filas, ejemplo :

A 1 Dato1
B 1 Dato1
A 2 Dato2
B 2 Dato2
A 3 Dato3
B 3 Dato3
A 4 Dato4
B 4 Dato4

Necesito diferenciar las parejas, para eso he pensado en colorear una
de las parejas. Por ejemplo, pintar de mismo color A1,B1,A3,B3. Realice
el siguiente codigo en el metodo lvUnoCustomDrawItem :

procedure TfrmMain.lvUnoCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if (TagPair = 2) and (TagColor = 0) then begin
TagPair := 0;
TagColor := 1;
end
else if (TagPair = 2) and (TagColor = 1) then begin
TagPair := 0;
TagColor := 0;
end;

if TagColor = 1 then
lvUno.Canvas.Brush.Color := $FFCCCC;
TagPair := TagPair + 1;
end;

Eso me funciona OK, pero cuando hago scroll o selecciono un item de la
grilla pierdo el color de las columnas. Osea, no se mantienen las
parejas de filas pintadas.

PD. TagPair,TagColor son variables globales para controlar el pintado
de las paejas de filas...

Muchas Gracias y espero que puedan ayudarme.

Wence. :cool:

JXJ
17-05-2005, 05:20:40
Esto te ha de servir muy bien
http://www.delphidabbler.com/articles.php?article=16

tambien tiene unos demos en un comprimido zip.-

http://www.delphidabbler.com/download.php?file=article-16-demo.zip

wvidela
17-05-2005, 21:47:57
Gracias Amigo...
Muy bueno el documento....la verdad me sirvio para aclarar los conceptos.
Asi que obte por definir un arreglo donde indico si la columna es o no pinta...

El codigo en el evento lvUnoCustomDrawItem quedó asi :
if p[Item.Index + 1] = 1 then
lvUno.Canvas.Brush.Color := $FFCCCC;
El arreglo p lo inicializo al momento de cargar los datos en el listview.

Muchas Gracias!!!!