Club Delphi  
    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 07-03-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: Jan 2007
Posts: 664
Poder: 12
Angel.Matilla Va por buen camino
Uso de TObject en un TStringList

Uso con relativa frecuencia (ComboBox, Listbox, etc.) el método AddObjects para poder tener dos "columnas" en estos objetos. Siempre lo había usado con enteros pero me he encontrado una sugerencia de ecfisa en otro hilo para poder poner por ejemplo un AnsiString.

Sin embargo no veo como hacer para recuperar el valro de esa "segunda columna". Hasta ahora, con valores enteros, lo hacía así por ejemplo:
Código PHP:
int nValor = (long)(Tobject *)ComboBox->Items->Objects[ComboBox->ItemIndex]; 
pero ¿cómo hago para extraer ese valor? Haciendo algo similar:
Código PHP:
AnsiString cCadena = (AnsiString)(Tobject *)ComboBox->Items->Objects[ComboBox->ItemIndex]; 
el compilador me da error.
Responder Con Cita
  #2  
Antiguo 07-03-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: Jan 2007
Posts: 664
Poder: 12
Angel.Matilla Va por buen camino
Y volviendo a leer la sugerencia de ecfisa creí que había dado con la solución en:
Código PHP:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 for(
int i=0;i<10;i++)
  
ListBox1->Items->Add(TS->Strings[i]+ " - " +
    ((
TClase*)(TS->Objects[i]))->Cadena);

pero algo no acabo de entender. Estoy trabajando sobre un ComboBox; al fin y al cabo los ítemes definidos no dejan de ser un TStringList. Lo cargo así:
Código PHP:
TClase *Clase;

Motivo->Items->Clear();
Query->Close();
Query->SQL->Text "SELECT Literal, Codigo FROM Mensajes WHERE Texto IS NULL AND CHAR_LENGTH(TRIM(Codigo)) <> 3 ORDER BY Codigo";
Query->Open();
for (; !
Query->EofQuery->Next())
{
     
Clase = new TClase;
     
Clase->Cadena Query->FieldByName("Codigo")->AsString;
     
Motivo->Items->AddObject(Query->FieldByName("Literal")->AsString " (" Clase->Cadena ")", ((TObject *)Clase));
}
delete Clase
sin problema. Pero al tratar de rescatar el valor del TObject, para ejecutar un query, hago esto:
Código PHP:
Clase = new TClase;
Query->ParamByName("Devuelto")->AsDateTime StrToDate(Devuelto->Text);
Query->ParamByName("Motivo")->AsString     = ((TClase *)Motivo->Items->Objects[Motivo->ItemIndex]->Cadena); 
y el compilador me da un error E2316 'Cadena' is not a member of 'TObject' en esa última línea de código (Query->ParamByName("Motivo")->AsString). ¿Qué me estoy saltando?
Responder Con Cita
  #3  
Antiguo 07-03-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.983
Poder: 28
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Ejemplo:
Código PHP:
...
class 
ClassStr {
public:
  
AnsiString Cadena;
};

ClassStr *cStr;


// Cargar unos pares de cadenas
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 for(
int i=0;i<10;i++) {
  
cStr = new ClassStr;
  
cStr->Cadena "AnsiString " IntToStr(i);
  
ComboBox1->Items->AddObject("Item "+IntToStr(i), ((TObject*)cStr));
 }
}

// Mostrar ambas cadenas
void __fastcall TForm1::ComboBox1Click(TObject *Sender)
{
  
int inx ComboBox1->ItemIndex;

  if ( 
inx != -) {
    
AnsiString cadena1 ComboBox1->Text;
    
AnsiString cadena2 = ((ClassStr*)(ComboBox1->Items->Objects[inx]))->Cadena;
    
ShowMessage(cadena1 '\n' cadena2);
  }

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 07-03-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.983
Poder: 28
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Y si deseas hacerlo usando los nuevos moldeos;
Código PHP:
  ...
  
AnsiString cadena2 reinterpret_cast<ClassStr*>(ComboBox1->Items->Objects[inx])->Cadena;
  ... 
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 07-03-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: Jan 2007
Posts: 664
Poder: 12
Angel.Matilla Va por buen camino
GRacias por las contestaciones. Voy a probarlo ahora mismo.
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
Problema con TDBXReaders dentro de TMiClase(TObject) Ignacio Gentile Conexión con bases de datos 1 18-04-2013 16:49:06
Convertir Un TObject a String? Jhonjhon_123 OOP 5 22-06-2010 19:05:37
Saber que clase-hija es un TObject eflosten OOP 6 20-04-2010 12:31:38
TStringList y Record blueicaro OOP 3 29-10-2007 20:49:54
TStringList esquerda21 Varios 10 19-01-2004 11:15:21


La franja horaria es GMT +2. Ahora son las 18:21:54.


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