Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-04-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
sigo con el tema...

coloco

frmbalance.free
frmbalance.nil

y me sale stack overflow
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #2  
Antiguo 06-04-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Cita:
Empezado por oscarac Ver Mensaje
sigo con el tema...

coloco

frmbalance.free
frmbalance.nil

y me sale stack overflow
Pero.. en qué parte de tu código fuente colocas esas instrucciones? ¿Algun evento específico? ¿dónde?
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 06-04-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

De seguro está poniendo ese código en el evento OnDestroy del formulario en cuestión...


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #4  
Antiguo 06-04-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
estuve leyendo mastering delphi

y en un ejemplo dice que para destruir un formulario

basta con colocar en el evento Close

action := caFree
frmBalance := nil

aqui.. en la pagina 359

entonces asi lo estaba haciendo desde un principio
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #5  
Antiguo 06-04-2011
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
Liberar un objeto dentro de su propio destructor no tiene sentido. Si se llama al destructor es porque el objeto ya está siendo liberado.

// Saludos
Responder Con Cita
  #6  
Antiguo 06-04-2011
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 oscarac.

Me gusta más:
Código Delphi [-]
procedure TForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:= caFree;
end;

procedure TForm.FormDestroy(Sender: TObject);
begin
  Form:= nil;
end;

Agrego un Koan de Ian Marteens que leí hace un buen tiempo y me pareció muy interesante: ¿Hay vida después de la muerte?.

Un saludo.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 06-04-2011 a las 20:22:06.
Responder Con Cita
  #7  
Antiguo 06-04-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Yo tambien uso el modelo de ecfisa, pero cabe destacar que tambien se puede hacerlo todo en el mismo evento OnClose de la forma siguiente:
Código Delphi [-]
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;{todos sabemos que aquí se manda a destruir el formulario
 con el procedimiento Release que  su vez hace uso de la API PostMessage 
que lógicamente liberará al formulario cuando se pueda y no de inmediato
 es por eso que liberar un formulario con el método Release es más flexible, para un mejor comprension ruego buscar "release" en la ayuda de Delphi}
Form2:=nil;
end;

EDITO: Viendo éste asunto me pregunto sino sería util un método ReleaseAndNil??
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #8  
Antiguo 06-04-2011
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
Cita:
Empezado por rgstuamigo Ver Mensaje
EDITO: Viendo éste asunto me pregunto sino sería util un método ReleaseAndNil??
Pues no. Porque en realidad, esto:

Código Delphi [-]
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
Form2:=nil;
end;

es una mala práctica. Una clase no debería hacer referencia a una instancia en particular. Yo sé que esto es muy común pero no debería hacerse de esta manera.

De entrada, no debería usarse la variable Form2 que el IDE crea en automático por la simple razón de que no es bueno usar variables globales. Si el formulario principal requiere una instancia de Form2 y necesita tenerla reservada, entonces se declara una variable de tipo TForm2 (o, mejor, de tipo TForm) como campo privado.

// Saludos
Responder Con Cita
  #9  
Antiguo 06-04-2011
Avatar de javier7ar
javier7ar javier7ar is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 124
Poder: 19
javier7ar Va por buen camino
Cita:
Empezado por oscarac Ver Mensaje
estuve leyendo mastering delphi

y en un ejemplo dice que para destruir un formulario

basta con colocar en el evento Close

action := caFree
frmBalance := nil
De la ayuda de Delphi, sobre el metodo Free
Cita:
Warning: Never explicitly free a component within one of its own event handlers or the event handler of a component it owns or contains. For example, do not free a button or the form that owns the button in its OnClick event handler.
O sea, que si pones frmBalance.Free (que no es lo mismo que action:=caFree) o si llamas a FreeAndNil(frmBalance) dentro del OnClose de frmBalance o dentro del OnDestroy (que no tendria sentido) te va a dar error.

Lo que haces vos esta bien, porque vos abris las ventanas con Show, entonces las liberas cuando se cierran en el OnClose (con action:=caFree)
Lo que NO podes hacer es cambiar la instruccion action:=caFree; por frmBalance.Free; porque ahi si te va a dar error.

Cuando se usa ShowModal para mostrar las ventanas, la siguiente linea al ShowModal no se ejecuta hasta que se cierra la ventana, entonces se hace la liberacion en la linea siguiente:

Código Delphi [-]
frmBalance:=TfrmBalance.Create(Self);
frmBalance.ShowModal;
frmBalance.Free;
frmBalance:=nil; 
// ó FreeAndNil(frmBalance) para hacerlo en una sola linea


por ultimo, de la ayuda de Delphi sobre el metodo Free...
Cita:
To free a form, call its Release method, which destroys the form and releases the memory allocated for it after all its event handlers and those of the components it contains are through executing.
... aunque yo siempre use Free; jeje

Saludos
Responder Con Cita
  #10  
Antiguo 30-01-2012
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

No se cuando tiempo tienen este hilo.

Este es el codigo de freeAndNil
Código Delphi [-]
procedure FreeAndNil(var Obj);
var
  Temp: TObject;
begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
end;

Primero Nil
Y Luego Free.

Parece ilogico. pero no hay perdida de memoria.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
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
Forms: FreeAndNil ó Release y la validación Assigned? jbautista Varios 13 09-02-2010 17:33:03
Assigned y Free gluglu Varios 4 14-05-2007 21:03:37
Problemas FreeAndNil OscarG OOP 4 09-11-2005 12:48:46
Free Pascal 2.0 marcoszorrilla Noticias 6 19-05-2005 12:04:51
Componente free... Mauro® Varios 10 12-06-2004 13:15:24


La franja horaria es GMT +2. Ahora son las 07:50:53.


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