Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-07-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 26
maeyanes Va por buen camino
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);
  }
Ahora, tiene años que no programo nada en C++, así que el casting de entero a puntero me imagino que no se hace de la forma en que lo puse...


Saludos...
Responder Con Cita
  #2  
Antiguo 09-07-2008
Ziara Ziara is offline
Miembro
 
Registrado: dic 2007
Posts: 43
Poder: 0
Ziara Va por buen camino
Buenas tardes!

Todavía no lo tengo muy claro, te voy a plantear mis dudas.

Cita:
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...
Bien, el ListView lo tengo en un Unit4, por ejemplo, que se ejecuta como un hilo donde me va mostrando, en una función, la información en el ListView. Ahora mismo lo tengo así:
Código:
void __fastcall Thread::Mostrarlineas()
{
 TListItem* item = Form1->ListView->Items->Add();
 item->Caption = cadena1;
 item->SubItems->Add(cadena2);
 item->SubItems->Add(cadena3);
}
Ahora agrego el código siguiente:

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);
}
No se si esto es correcto, que está haciendo el nuevo código introducido?

Gracias.
Responder Con Cita
  #3  
Antiguo 09-07-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 26
maeyanes Va por buen camino
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;
  }
}
Ahora, aquí estoy suponiendo que item->Caption tiene como valor el nombre del protocolo, si no es así, solo tienes que cambiar las comparaciones en los if...

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...
Responder Con Cita
  #4  
Antiguo 11-07-2008
Ziara Ziara is offline
Miembro
 
Registrado: dic 2007
Posts: 43
Poder: 0
Ziara Va por buen camino
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;
 }

}
Se usa strings[] para concretar la columna no? si entre corchetes escribo 2 me estoy refiriendo a la columna nº3?

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
pero var tiene que ser un variable que no devuelva nada y no sé qué tipo de variable usar para declarar var.

también había pensado en convertir item->Data en un int:

Código:
int var;
int (item->Data) = var;
pero esto me da el siguiente error:

No se puede modificar un objeto constante.

Hay alguna alternativa?

Gracias.
Responder Con Cita
  #5  
Antiguo 05-08-2008
Ziara Ziara is offline
Miembro
 
Registrado: dic 2007
Posts: 43
Poder: 0
Ziara Va por buen camino
Muy buenas!

Alguien le puede echar un vistazo a este hilo plisss, que se me quedó la duda sin resolver . Y nu se porqué nu me sale...

Gracias de antemano!
Responder Con Cita
  #6  
Antiguo 05-08-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
A ver, según yo, item->Data es un apuntador a void para permitir que apunte a lo que necesitemos y bastaría hacer el moldeo:

Código:
(int *) item->Data = 84;
// Saludos
Responder Con Cita
  #7  
Antiguo 05-08-2008
Ziara Ziara is offline
Miembro
 
Registrado: dic 2007
Posts: 43
Poder: 0
Ziara Va por buen camino
Hola!

Agradezco que hayas contestado tan rápido!

Lo he probado, y al compilar me da el error:

Lvalue required

Esto es algo de que la parte Izquierda de la asignación
(int *) item->Data = 1;
es una constante o algo así... pero no lo entiendo...?

Saludos y gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 04:44:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi