Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Como colorear las filas de un ListView??

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Como colorear las filas de un ListView?? Responder citando

Hola, a ver si me podeis dar alguna idea.

Tengo una clase Thread donde va capturando y sacando paquetes (sniffer) y se muestra en un ListView en vsReport donde tiene varias columnas (IP origen, IP destino, protocolo...) y me gustaría poder colorear las filas (que corresponde a cada paquete) de un determinada color según el protocolo que tenga que está almacenada en una variable string cadenaPRt.

La class ThreadPackakes de tipo Thread tiene la siguiente estructura y he probado con Form1->ListView->Canvas->Brush->Color = clGreen; para colorear las filas, pero no hace nada:

Código:
void __fastcall ThreadPackets::Execute()
{
...
Synchronize(UpdateListView);
}

void __fastcall ThreadPackets::UpdateListView()
{

            TListItem* item = Form1->ListView->Items->Add();
            item->Caption = cadenaIDx;
            item->SubItems->Add(cadenaTIm);
            item->SubItems->Add(cadenaPRt);

            if (cadenaPRt == "TCP")
            {
                Form1->ListView->Canvas->Brush->Color = clGreen;
            }
            else Form1->ListView->Canvas->Brush->Color = clRed;
         
}


Form1 esta asociado a un Unit distinto en donde tengo alojado el ListView.
Como puedo colorear las filas según el valor de una determinada variable?

gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

En el OnCustomDrawItem del ListView. Por ejemplo:
Código:
void __fastcall TfPersonas::HisDomCustomDrawItem(TCustomListView *Sender, TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
     TListItem pItem = Item;

     Sender->Canvas->Font->Color = clBlack;
     Sender->Canvas->Font->Name  = "Arial Narrow";
     Sender->Canvas->Font->Height = -13;
     Sender->Canvas->Font->Style = TFontStyles() >> fsBold;
     if (pItem->SubItems->Strings[3] != "0")
     {
          if (pItem->SubItems->Strings[3] == "R")
          {
               Sender->Canvas->Font->Color = clWhite;
               Sender->Canvas->Brush->Color = clPurple;
          }
          else
          {
               Sender->Canvas->Font->Color = clRed;
               Sender->Canvas->Font->Style = TFontStyles() << fsBold;
          }
     }
}
//---------------------------------------------------------------------------

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Esto es de un ListView que tengo definido con cinco columnas. Si en la última hay una R, pinto toda la fila de color púrpura con la letra en blanco; si hay otro valor que nosea cero, va en rojo sobre fondo blanco.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola gracias por contestar!, Lo estoy probando ahora mismo, pero me aparece un error que no debería... o eso creo.

cuando creo una función en mi class Thread para colorear las filas, esto de aqui abajo corresponde al .cpp:

Código:
void __fastcall ThreadPackets::ColourListView(TCustomListView *Sender,
TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
 ..
}


y en el .h defino la función:
Código:

class ThreadPackets : public TThread
{
 private:

 protected:

 public:
          void __fastcall ColourListView(TCustomListView *Sender,
        TListItem *Item, TCustomDrawState State, bool &DefaultDraw);
}


al compilar me da error en:

void __fastcall ColourListView(TCustomListView *Sender,

y es por: E2293 ) expected
pero no veo que falte ningún paréntesis... ?? Sad
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

hola, podeis echarle un vistazo a este tema? todavía no he conseguido saber por qué me falla.

gracias!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Perdona. No había visto tu mensaje anterior. He estado mirando el programa del que saqué el código y en el include del formulario el evento OnCustomDrawItem se crea en la sección published y no en la public como lo has creado tú. No sé si tendrán alguna influencia.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola, lo he probado en __published y nada, de todas formas puede ser por el sender? que es exactamente?

void __fastcall ListViewCustomDrawItem(TCustomListView *Sender, TListItem *Item, TCustomDrawState State, bool &DefaultDraw);

ListViewCustomDrawItem --> esto lo puedo cambiar por un nombre que yo quiera no?

sender --> exactamente que es?

gracias de antemano.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

zankiu escribió:
ListViewCustomDrawItem --> esto lo puedo cambiar por un nombre que yo quiera no?

Sí, siempre y cuando respetes los parámetros. Ten en cuenta que esos parámetros son los que pasa el objeto para su uso. Puedes llamarle PintaFilas, por ejemplo.
zankiu escribió:
sender --> exactamente que es?

Literalmente significa remitente, el que envía algo por si te da una pista de lo que hace. En las llamdas a las funciones, por ejemplo y si no me equivoco, trae las característcas del elemento que hace la llamada. El sender lo implementa directamente el propio Builder.
zankiu escribió:
Hola, lo he probado en __published y nada

Si quieres pásame el código del proyecto a amatic@ccm.es y le hecho una ojeada.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.