Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-09-2010
iktwo iktwo is offline
Miembro
 
Registrado: ago 2008
Posts: 22
Poder: 0
iktwo Va por buen camino
Crear Frames dinamicamente

hola, pues que he hecho un programa que tiene pestañas pero en una implementación propia con imagenes, en fin, el problema que tengo es a la hora de la creación y destrucción de mis frames, la idea es que al hacer click en una pestaña se cree un frame pero reviso si ya hay algún otro creado para liberar esa memoria.. si existe algún otro frame a liberarlo!!

si lo hago de esta forma:

Código Delphi [-]
ventana2:=TFrame2.Create(nil);


me deja crear y "destruir" sin problemas aparentemente, pero he visto que la memoria no se libera.

sin embargo si al crearlo lo creo así:

Código Delphi [-]
ventana2:=TFrame2.Create(self);


la memoria vaya que se libera, pero a la segunda vuelta al querer crearlo de nuevo me dice que ya existe.

al dar click a cada pestaña ejecuto algo como esto:
Código Delphi [-]
if ventana2<>nil then 
     begin
           ventana2.Free; 
     end;
La verdad que no se que estoy haciendo mal, pero ya me he desesperado, creo que aún no comprendo como crear y destruir objetos dinamicamente..

Gracias!!
Responder Con Cita
  #2  
Antiguo 17-09-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 iktwo.

Crealo con Owner = nil y probá con:
Código Delphi [-]
   FreeAndNil(ventana2);

Saludos.
Responder Con Cita
  #3  
Antiguo 17-09-2010
iktwo iktwo is offline
Miembro
 
Registrado: ago 2008
Posts: 22
Poder: 0
iktwo Va por buen camino
Gracias ecfisa por tu pronta respuesta, de la forma que me dices la memoria ya no se satura, me refiero a que ahora al crear ya no vuelve a reservar esa memoria, pero sigue sin liberarla, el frame se destruye visualmente y me deja crearlo de nuevo sin problemas, pero no libera la memoria

Edito: La memoria la reviso con el administrador de tareas y para asegurarme que el frame tenga suficiente tamaño para que se note, le he puesto una imagen, no se si deba destruir la imagen aparte, pero el frame no tiene onClose, segun entiendo con destruir el frame debería liberar la memoria, no se si me equivoco en eso..

Última edición por iktwo fecha: 17-09-2010 a las 23:27:11.
Responder Con Cita
  #4  
Antiguo 17-09-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.

No sabía lo de la imágen, si usás un componente TImage probá de liberarlo antes del FreeAndNil.

Saludos.
Responder Con Cita
  #5  
Antiguo 18-09-2010
iktwo iktwo is offline
Miembro
 
Registrado: ago 2008
Posts: 22
Poder: 0
iktwo Va por buen camino
Bueno gracias, pero lo que me dices no es opción por la cantidad de componentes que podría llegar a tener mi frame, aparte si al crearlos les pongo en vez de nil self no necesito liberar la imagen independientemente, uf no se que pasa pero no logro liberar esa memoria, de nuevo gracias
Responder Con Cita
  #6  
Antiguo 18-09-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
Una aclaración.

El administrador de tareas es relativamente una mala idea para ver el consumo de memoria. Esto se debe a la forma en la que la memoria se asigna y libera en Windows. Puede ocurrir (de hecho es prácticamente 100% del tiempo) que vos liberes la memoria desde tu programa, pero que realmente no se esté liberando por el sistema de memoria que usa Windows.

Lo más seguro creo que sería usar FastMM. Que es un manejador de memoria muy potente que, entre otras cosas, te dice cuando hay goteos de memoria. Si estás usando, creo recordar, versiones anteriores a Delphi 2010, podés agregarlo a la uses de tu DPR y listo (y preparate para llevarte una sorpresa ). En D2010 creo que ya viene incorporado así que no hay necesidad. Sólo tendrías que habilitarlo (supongo).

Otra cuestión, no pusiste el código que estás usando para liberar la memoria antes de crear un nuevo frame... Quizás está ahí el problema.

Saludongos.
Responder Con Cita
  #7  
Antiguo 18-09-2010
iktwo iktwo is offline
Miembro
 
Registrado: ago 2008
Posts: 22
Poder: 0
iktwo Va por buen camino
Gracias de nuevo por la respuesta, antes que nada mi código para liberar:
Código Delphi [-]
if ventana2<>nil then
     begin
       //ventana2:=nil;
       //ventana2.Free;
       FreeAndNil(ventana2);
     end;

Bueno he probado primero nil y luego free, así como también FreeAndNil, uso delphi 2010, y aunque se que el administrador de tareas no es lo mejor para analizar si se ha liberado o no, lo raro es que si creo el frame así

Código Delphi [-]
ventana1:=TFrame1.Create(self);

en vez de con nil, eso si me libera inmediatamente la memoria se refleja al instante en el adminsitrador de memoria, es por eso la duda.. claro que al crearlos con self no me deja crearlos 2 veces me dice que el nombre del componente ya existe..

Gracias!!
Responder Con Cita
  #8  
Antiguo 18-09-2010
iktwo iktwo is offline
Miembro
 
Registrado: ago 2008
Posts: 22
Poder: 0
iktwo Va por buen camino
Siento hacer doble post, no me dejaba editar el anterior, pues ya libera la memoria, lo he hecho con FreeAndNil pero el owner la propia forma e inmediatamente lo libera, Gracias por su ayuda!!
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
crear MaterialLibrary dinamicamente Isuri Varios 13 22-04-2009 22:42:33
Crear Frame Dinámicamente chinchan C++ Builder 2 09-05-2008 15:07:08
crear componente de bd dinamicamente gushmaish Varios 2 01-03-2007 20:28:45
Crear RadioButtons dinámicamente Javi2 Varios 4 26-07-2004 18:27:00
crear popups dinamicamente. tango01 OOP 2 06-01-2004 17:33:03


La franja horaria es GMT +2. Ahora son las 10:52:46.


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