Delphi - Liberar Memoria al Cerrar Formulario

 
Vista:

Liberar Memoria al Cerrar Formulario

Publicado por Irreal (69 intervenciones) el 06/11/2006 10:04:24
¿Como se puede liberar memoria al cerrar una ventana.?

Me encuento que desde un menu abro los formularios con la siguiente instruccion:
Tform.Create(Application);

y al cerrar lo hago desde un botón que lanza ( no se usa el boton cerrar de la propia ventana) :
Self. Close;

Cuando vuelvo a abrir la ventana la abre como form_2, lo cual me supone dos probremas:
1. No puedo dirigirme a ella como usar la propiedad Self.Name porque no corresponde con el que yo tengo registrado.
2. Me supone una carga adicional a la memoria.

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Liberar Memoria al Cerrar Formulario

Publicado por BigLuis (713 intervenciones) el 06/11/2006 12:29:18
No es la unica pero es una:
var
FormFechas:TFormFechas;
FechaIni,FechaFin:TDate;
//El FormFechas es un formulario que has creado para introducir fechas por ejemplo con un boton tipo TBitButton con el modal result=mrOK.
begin
FormFechas:=TFormFechas.Create(application);
try
if FornFechas.Showmodal=mrOK then
FechaIni:=srttodate(FormFechas.Edit1.text);
etc......
finally
begin
FormFechas.Free;
FormFechas:=nil;
end;
end;//Try
end;
Tambien puedes implementar el evento OnClose del propio formulario de la misma forma.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Liberar Memoria al Cerrar Formulario

Publicado por Irreal (69 intervenciones) el 06/11/2006 13:01:03
no consigo hacerlo funcionar.
Al poner el Free y el Nil en el OnClose me da error abstrato. Me imagino que será por intentar liberar el formulario antes cerrar el formulario.

procedure Tform.FormClose(Sender: TObject; var Action: TCloseAction);
begin
inherited;
form.Free;
form:=nil;
end;

Y si lo pongo desde la llamada del menu según se abre se cierra.

procedure TfMenu.ProgramasClick(Sender: TObject);
begin
form:= Tform.Create(Application);
try
finally
begin
fprograma.Free;
fprograma:=nil;
end;
end;

No se donde poner result=mrOK.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Liberar Memoria al Cerrar Formulario

Publicado por BigLuis (713 intervenciones) el 06/11/2006 13:43:20
procedure Tform.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;

procedure TfMenu.ProgramasClick(Sender: TObject);
begin
form:= Tform.Create(Application);
try
Form.Showmodal;//para que lo muestre y hasta que tu no aprietes el boton cerrar por ejemplo no se destruya.
finally
begin
fprograma.Free;
fprograma:=nil;
end;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Liberar Memoria al Cerrar Formulario

Publicado por Irreal (69 intervenciones) el 07/11/2006 10:06:00
Gracias!

No se si te servirá de alguna ayuda pero no me ha hecho falta ni el .Free ni la asignación del nil.

Tras el action := free recupera toda la memoria consumida.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Liberar Memoria al Cerrar Formulario

Publicado por BigLuis (713 intervenciones) el 07/11/2006 12:11:47
Ambas opciones hacen lo mismo pero desde sitios diferentes, era solo para que vieras distitas formas. Efectivamente lo que libera la memoria es la asignacion FREE pero despues de liberada, el puntero sigue apuntando a la direccion de memoria que ocupaba en la pila el objeto y con la asignacion NIL borras ese rastro. Pero no le des mayor importancia.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar