![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Buenas tardes!
Cita:
Cita:
Gracias. |
|
#2
|
|||
|
|||
|
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):
Ya con esto cada que hagas un scroll se deben dibujar bien los items en la lista... Saludos... |
|
#3
|
|||
|
|||
|
Buenas,
Cita:
Como el ListView lo tengo en Form1 en Unit1 pues traslado el valor que me interesa con snf->Proto() donde snf es un objeto de la clase Snifer, así paso el valor que me interesa (en este caso el protocolo) del Unit3 al Unit1 para usarlo dentro del método de ListViewCustomDrawItem como lo he indicado anteriormente. Según el código: Código:
// Agregas un TListItem nuevo:
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);
ListViewCustomDrawItem. No lo tengo muy claro. Gracias |
|
#4
|
|||
|
|||
|
Hola...
Ese código lo vas a poner en donde agregas los items en el ListView... Busca en tu código donde haces ListView.Items.Add y ahí lo puedes adaptar o agregar... Por ejemplo si tienes en tu código algo como: Código:
TListItem AItem = ListView->Items->Add;
AItem->Caption = snf2->Proto();
/* Aquí agregas el código */
if (AItem->Caption = '"TCP")
{
AItem->Data = Pointer(0);
}
else
if (AItem->Caption = "UDP")
{
AItem->Data = Pointer(1);
}
else
{
AItem->Data = Pointer(2);
}
Saludos... |
|
#5
|
|||
|
|||
|
Buenas tardes!
Todavía no lo tengo muy claro, te voy a plantear mis dudas. Cita:
Código:
void __fastcall Thread::Mostrarlineas()
{
TListItem* item = Form1->ListView->Items->Add();
item->Caption = cadena1;
item->SubItems->Add(cadena2);
item->SubItems->Add(cadena3);
}
Código:
void __fastcall Thread::Mostrarlineas()
{
TListItem* item = Form1->ListView->Items->Add();
//agrego otro objeto item
TListItem* dataitem = Form1->ListView->Items->Add();
dataitem->Caption = cadena2; //cadena2 indica el protocolo(UDP,TCP..)
if (dataitem->Caption == "TCP")
{
dataitem->Data = Pointer(0);
}
else if (dataitem->Caption == "UDP")
{
dataitem->Data = Pointer(1);
}
else
{
dataitem->Data = Pointer(2);
}
item->Caption = cadena1;
item->SubItems->Add(cadena2);
item->SubItems->Add(cadena3);
}
Gracias. |
|
#6
|
|||
|
|||
|
Hola...
Lo que tienes que hacer es: Código:
void __fastcall Thread::Mostrarlineas()
{
TListItem* item = Form1->ListView->Items->Add();
item->Caption = cadena1;
item->SubItems->Add(cadena2);
item->SubItems->Add(cadena3);
// Aquí el código:
if (item->Caption == "TCP")
{
item-Data = 0;
}
else if (item->Caption == "UDP")
{
item->Data = 1;
}
else
{
item->Data = 2;
}
}
También toma en cuenta que item->Data es una propiedad de tipo Pointer, esto al menos en Delphi, en C++ no se como se trate. También la asignación de los datos a item->Data puede que esté erronea, ya que C++ no es mi fuerte. Una vez que logres esto, el códido en el evento OnCustomDraw del TListView puede ser una estructura switch..case sobre la propiedad item->Data... Espero te sirva... Saludos... |
|
#7
|
|||
|
|||
|
Hola de nuevo,
entonces si mi columna es la tercera me quedaría así: Código:
void __fastcall Thread::Mostrarlineas()
{
TListItem *item = Form1->ListView->Items->Add();
item->Caption = cadena1;
item->Caption = Add(cadena2);
item->Caption = Add(cadena3);
//codigo nuevo
if (item->SubItems->Strings[2] == "TCP")
{
item->Data = 0;
}
else if (item->SubItems->Strings[2] == "UDP")
{
item->Data = 1;
}
else
{
item->Data = 2;
}
}
Cuando compilo me saca, el builder me saca un error: no puede convertir un int en un *void ya que item->data devuelve un *void y estoy asignadole un int. Había pensando crear una variable para recoger el contenido de item->Data algo como: Código:
item->Data = var también había pensado en convertir item->Data en un int: Código:
int var; int (item->Data) = var; No se puede modificar un objeto constante. Hay alguna alternativa? Gracias. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Extraño comportamiento de delphi 7 | smessina | Varios | 5 | 18-03-2008 12:50:54 |
| Extraño comportamiento de Firebird 2.0 | TrUnkS | Firebird e Interbase | 4 | 06-01-2007 23:05:57 |
| Comportamiento extraño de DisplayFormat | Thales | Conexión con bases de datos | 0 | 02-12-2005 21:56:32 |
| Comportamiento extraño de Delphi | walrus | Varios | 3 | 05-08-2004 10:04:32 |
| Comportamiento extraño con InnoBD | brandolin | MySQL | 0 | 20-10-2003 14:34:09 |
|