Delphi - Recuperación de memoria

 
Vista:

Recuperación de memoria

Publicado por Pascual (12 intervenciones) el 11/11/2006 17:50:35
Hola, tengo un programa en el que quiero que la recuperación de memoria se me haga correctamente.

He añadido a mi proyecto la unidad "Gestion de Memoria" que me crea un archivo de texto errores.log si la recuperacion de memoria no ha sido correcta.

Tengo este programa, es un formulario vacío:

unit formulario_vacio;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Close;
end;

end.

Con este programa se genera ese archivo de errores por lo que la recuperación de memoria no ha sido correcta. He probado a poner:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Destroy;
end;

Si hago esto no se genera ningún error de recuperacion de memoria pero el programa sigue en estado Running y tengo que dar a Ctrl+F2 para que se detenga la ejecución.

Estoy pensando en algo así como:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Destroy;
<Código equivalente a Ctrl+F2 para que se detenga la ejecución>
end;

¿Cómo hago para liberar toda la memoria que he reservado al crear el formulario?. 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:Recuperación de memoria

Publicado por BigLuis (713 intervenciones) el 11/11/2006 20:56:47
" procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Close;
end; "
En el evento OnClose no pongas el close porque ese evento precisamente se dispara cuando han ejecutado la instruccion CLOSE, por ejemplo desde un boton. Para liberar la memoria has de jugar con la Action del enuncuado de la procedure e igualarla a caFree

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;

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:Recuperación de memoria

Publicado por Pascual (12 intervenciones) el 20/11/2006 13:21:17
Ya está arreglado, lo que pasaba era que la unidad que decía si había errores o no estaba mal programada. Gracias de todos modos. Saludos.
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