Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-10-2010
metalfox6383 metalfox6383 is offline
Miembro
 
Registrado: jul 2005
Posts: 97
Poder: 19
metalfox6383 Va por buen camino
Question Problema usando el objeto TStrings

Hola:

Tengo este código:

procedure Tfr_principal.lb_buscarClick(Sender: TObject);
var vr_tags: TStrings;
begin

vr_tags.Append('texto');

end;

Quiero utilizar el objeto TStrings para crear una lista de textos, pero al intentar crear el primer elemento de la lista, me aparece este error:

http://mpo9qg.bay.livefilestore.com/...asd.jpg?psid=1

¿qué es lo que anda mal?

Gracias.
Responder Con Cita
  #2  
Antiguo 15-10-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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.

Antes de utilizar vr_tags tenés que crear una instancia de la clase.
Como TStrings es abstracta debés usar un descendiente en la creación, por ejemplo TStringList.

Código Delphi [-]
procedure Tfr_principal.lb_buscarClick(Sender: TObject);
var vr_tags: TStrings;
begin
  vr_tags:= TStringList.Create;  // línea que faltaba
  vr_tags.Append('texto');
end;

En algún punto, luego que termines de usar vr_tags, deberias liberar el recurso con:
Código Delphi [-]
  vr_tags.Free;

Saludos.

Última edición por ecfisa fecha: 15-10-2010 a las 20:43:21.
Responder Con Cita
  #3  
Antiguo 15-10-2010
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Primero tienes que crear el objeto, para despues utilizarlo:

Código Delphi [-]
var vr_tags: TStrings;
begin
   vr_tags := TStringsList.Create;
   try
      vr_tags.Add('Texto');
      {hacer lo que sea}
   finally
      vr_tags.Free;
   end;
end;

No debes olvidar liberar el objeto después de finalizar con su uso.
Responder Con Cita
  #4  
Antiguo 15-10-2010
metalfox6383 metalfox6383 is offline
Miembro
 
Registrado: jul 2005
Posts: 97
Poder: 19
metalfox6383 Va por buen camino
Muchas gracias. Ha funcionado. Una interrogante más: ¿Qué sucedería si no la libero?
Responder Con Cita
  #5  
Antiguo 15-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Si no la liberas y vuelves a llamar al evento dirá que el TStrings ya esta creado y no lo puede volver a crear dando error.
Si no me equivoco.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 15-10-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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
Cita:
Empezado por metalfox6383 Ver Mensaje
Muchas gracias. Ha funcionado. Una interrogante más: ¿Qué sucedería si no la libero?
Además de lo dicho por el amigo Caral, en el mejor de los casos la consecuencia es memoria ocupada inútilmente,
degradación de la perfomance y hasta fallos por falta de memoria.

En un ejemplo como ese, realmente no es apreciable la memoria ocupada. Pero es importante tomár como práctica
la liberación de los recursos utilizados; por que la memoria, aunque hoy es abundante, sigue siendo finita...


Saludos.

Última edición por ecfisa fecha: 15-10-2010 a las 22:25:39.
Responder Con Cita
  #7  
Antiguo 15-10-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 de nuevo metalfox.

Mirá este link del foro en que se explica el tema que te ocupa.


Saludos.
Responder Con Cita
  #8  
Antiguo 15-10-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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.

Por si quedara alguna duda te pongo un ejemplo con el que podés comprobar el efecto de no liberar recursos:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  vr_tags: TStrings;
  i: Integer;
  Mem: TMemoryStatus;
begin
  Mem.dwLength := SizeOf(Mem);
  GlobalMemoryStatus(Mem);
  Caption:= Format('Memoria virtual disponible: %d', [Mem.dwAvailVirtual]);
  for i:= 1 to 1000000 do
  begin
   vr_tags:= TStringList.Create;  // línea que faltaba
   vr_tags.Append('texto');
  end;
end;

Dale unos cuantos clicks al botón y me contas...

Saludos.
Responder Con Cita
Respuesta



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 de objeto que hereda de Timage astwin OOP 3 29-08-2010 19:21:22
Problema con aplicacion usando BDE yorgelis Conexión con bases de datos 14 09-04-2009 17:01:34
Problema con consultas usando ADO Garry Tablas planas 5 23-01-2008 10:07:08
Problema con Asignacion a un Objeto. BEPAI Varios 12 10-04-2007 13:28:35
Problema con Filter y EOF usando TTable El_Raso Conexión con bases de datos 0 20-03-2007 19:35:35


La franja horaria es GMT +2. Ahora son las 02:37:43.


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