| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
zankiu Lt Cmdr

Registrado: 23 Ene 2008Mensajes: 106
|
Publicado: Jue 13 Mar, 2008 6:10 pm Asunto: Como colorear las filas de un ListView?? |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 13 Mar, 2008 7:56 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 14 Mar, 2008 8:04 am Asunto: |
|
|
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 |
|
 |
zankiu Lt Cmdr

Registrado: 23 Ene 2008Mensajes: 106
|
Publicado: Mie 19 Mar, 2008 11:40 am Asunto: |
|
|
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... ??  |
|
| Volver arriba |
|
 |
zankiu Lt Cmdr

Registrado: 23 Ene 2008Mensajes: 106
|
Publicado: Mar 08 Abr, 2008 6:52 pm Asunto: |
|
|
hola, podeis echarle un vistazo a este tema? todavía no he conseguido saber por qué me falla.
gracias!! |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 09 Abr, 2008 7:08 am Asunto: |
|
|
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 |
|
 |
zankiu Lt Cmdr

Registrado: 23 Ene 2008Mensajes: 106
|
Publicado: Mie 09 Abr, 2008 6:51 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 10 Abr, 2008 7:18 am Asunto: |
|
|
| 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 |
|
 |
|