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 16-12-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 beholdecfisa is a splendid one to behold
Hola aguml.

Si deseas trabajar con un array dinámico de elementos tipo AnsiString la declaración,
Código PHP:
AnsiString **rutas 0
es incorrecta, estas declarando una matriz de elementos tipo AnsiString, la declaración debería ser:
Código PHP:
  AnsiString *rutas
De todos modos creo que tal vez usando TStrings te resulte mas simple... Un ejemplo (sin mucho ornamento):
Código PHP:
TStrings *ts;

// Crear lista
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  
ts = new TStringList;
}

// Cargar texto y grafico en TStrings
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  for(
int i 0ImageList1->Counti++) {
    
Graphics::TBitmapbm = new Graphics::TBitmap;
    
ImageList1->GetBitmap(ibm); 
        
ts->AddObject(IntToStr(i),   // cadena
                     
(TObject*)bm);  // imágen
  
}
  
ListBox1->Items->Assign(ts);
}

// Mostrar en un ListBox
void __fastcall TForm1::ListBox1DrawItem(TWinControl *Controlint Index,
      
TRect &RectTOwnerDrawState State)
{
  
TListBox *lb static_cast<TListBox*>(Control);
  
Graphics::TBitmap *bm static_cast<Graphics::TBitmap*>(lb->Items->Objects[Index]);

  
lb->Canvas->FillRect(Rect);
  
lb->Canvas->Draw(Rect.left,Rect.topbm);  // mostrar bitmap
  
lb->Canvas->TextOut(Rect.left+bm->Width+10// mostrar cadena
    
Rect.toplb->Items->Strings[Index]);
}

// Liberar memoria
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  
delete ts;

(En el ejemplo los gráficos son extraidos de un TImageList)

Resultado:



Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 16-12-2014 a las 17:36:37.
Responder Con Cita
  #2  
Antiguo 16-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
en tu codigo veo cosas que no entiendo. Por ejemplo, creas un puntero de tipo TStrings y luego le asignas un TStringList ¿Por que no creas un simple AnsiString y luego haces un Add con el TStringList? Por cierto, si creo AnsiString *rutas, cuando quiera guardar una ruta supongo que seria rutas[i] pero ¿Y si quiero por ejemplo leer un caracter de una ruta en concreto? ¿Seria rutas[i][j]?
Responder Con Cita
  #3  
Antiguo 16-12-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 beholdecfisa is a splendid one to behold
Hola aguml.
Cita:
Empezado por aguml Ver Mensaje
en tu codigo veo cosas que no entiendo. Por ejemplo, creas un puntero de tipo TStrings y luego le asignas un TStringList..
La explicación es polimorfismo.


Cita:
Empezado por aguml Ver Mensaje
¿Por que no creas un simple AnsiString y luego haces un Add con el TStringList?
Quise ponerte un ejemplo mas completo para mostrar el potencial de la clase, pero podría haber sido:
Código PHP:
{
  
TStrings *rutas = new TStringList;

  for(
int i 015i++) rutas->Add("Ruta "+String(i));
  
ListBox1->Items->Assign(rutas);

  
delete rutas;


Cita:
Empezado por aguml Ver Mensaje
cuando quiera guardar una ruta supongo que seria rutas[i] pero ¿Y si quiero por ejemplo leer un caracter de una ruta en concreto? ¿Seria rutas[i][j]?
No, sería:
Código PHP:
  rutas->Strings[i][j]; 
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 16-12-2014 a las 23:53:45.
Responder Con Cita
  #4  
Antiguo 17-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
lo de rutas[i][j] me referia en el caso de hacerlo con un AnsiString *rutas. Otra cosa, he estado leyendo que TListString tiene el metodo Delete, Count, y Clear y que para eliminar todos los miembros de la lista habia que hacer "for(int i=Lista->Count-1; i>=0;i--) Lista->Delete(i); delete Lista; Lista = null;" pero tambien he leido que el metodo Clear limpia la lista y libera toda la memoria ocupada por los miembros de la lista. Veo que tu te limitas a eliminar la lista sin eliminar antes sus miembros. ¿Puedes aclararme esos puntos por favor?
Responder Con Cita
  #5  
Antiguo 17-12-2014
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.025
Poder: 28
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
La clase TListString gestiona la memoria por sí mismo. Por ejemplo, el código de su destructor es más o menos:
Código:
   ~TListString () { this->Clear (); }
Por lo tanto, no es necesario que llames al método Clear antes de destruirlo.
Responder Con Cita
  #6  
Antiguo 17-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
ok, lo de recorrer la lista y borrar uno a uno los miembros con el metodo delete lo vi en un ejemplo donde usaba AddObject para añadir objetos a la stringlist y supongo que será por eso y que al no tener objetos no hace falta. Supongo que para el TList que tambien tengo que usar para algunos objetos si tendre que usar su metodo delete y eliminar todos los objetos antes de destruir laTList ¿No?
Responder Con Cita
  #7  
Antiguo 17-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
por cierto, ¿Que diferencia hay entre crear TStrings *lista = new TStringList; o crear TStringList *lista = new *TStringList? ¿Que ventajas y pegas puede haber entre usar uno u otro?
Responder Con Cita
  #8  
Antiguo 17-12-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 beholdecfisa is a splendid one to behold
Hola aguml.
Cita:
Empezado por aguml Ver Mensaje
... Supongo que para el TList que tambien tengo que usar para algunos objetos si tendre que usar su metodo delete y eliminar todos los objetos antes de destruir laTList ¿No?
Si, así es. En el caso de TList es tu responsabilidad liberar la memoria ocupada.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
Duda con inicialización de variables lucasarts_18 Varios 13 04-11-2010 17:12:56
Duda sobre destrucción de objetos compuestos por otros objetos noob OOP 11 16-02-2009 00:28:33
Recorrido por objetos en forma de array. vpepen Varios 7 23-01-2009 13:11:12
Array de objetos propios? gandalf_uy OOP 6 26-02-2008 04:19:48
Array de OBJETOS en Delphi 7 animal OOP 5 08-07-2005 11:33:21


La franja horaria es GMT +2. Ahora son las 00:39:37.


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