Hola...
Me imagino que lo que estás haciendo es como un registro de actividad de lo que recibe el objeto, no es así?
Entonces, lo que sucede es que el componente al redibujar siempre va a leer el último valor que tiene el objeto, es por eso que cuando haces un scroll ya no se ven como cuando se insertaron la primera vez...
Para esto podrías usar la propiedad
Data del
TListItem (el ejemplo te lo pongo en Delphi, pero deberías poder traducirlo a C sin problemas):
Código Delphi
[-]
with ListView1.Items.Add do
if snf2.Proto = 'TCP' then
Data := Pointer(0)
else
if snf.Proto = 'UDP'
Data := Pointer(1)
else
Data := Pointer(2);
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem;
State: TCustomDrawState; DefaultDraw: Boolean);
begin
case Integer(Item.Data) of
0:
Sender.Canvas.Font.Color := clGreen;
1:
Sender.Canvas.Font.Color := clBlue;
2:
Sender.Canvas.Font.Color := clPurple
else
Sender.Canvas.Font.Color := clRed
end
end;
Ya con esto cada que hagas un scroll se deben dibujar bien los items en la lista...
Saludos...