Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Liberar los formularios de la memoria (https://www.clubdelphi.com/foros/showthread.php?t=8579)

Lionel 26-03-2004 09:32:09

Liberar los formularios de la memoria
 
Buenos dias a todos!!

Necesito saber cual es el procedimiento para cuando cierras un formulario se destruya completamente, liberando asi los recursos que ocupa en el sistema. En los formularios normales sobra con poner el Close?

En los formularios MDI tengo el problema que cuando los cerraba en vez de desaparecer se me hacian en una ventana pequeñita y seguian siendo visibles, ademas de eso si los intentaba destruir lo unico que me salian eran errores de memoria (esto tambien me pasa con los form normales).

¿Que diferencia hay entre el Free y el Destroy?

Enga muchas gracias y un saludo!! :rolleyes:

marto 26-03-2004 09:46:57

Wop!

Destroy es el destructor del objeto, Free es un método de TObject que comprueba que la referencia No apunte a nil:

Cita:

Empezado por System.pas
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;

Se desaconseja el uso de Destroy, ya que no tiene el control de Free.

Existen dos maneras (por lo menos) de destruir un formulario. Form.Free y programar el evento OnClose, asignando al parametro Action el valor caFree.

Respecto a lo que comentas que te pasa con los forms MDI, te pego un trozo del help de delphi, en la página que explica el evento OnClose:

Cita:

Empezado por Delphi'help
If a form is an MDI child form, and its BorderIcons property is biMinimize, then the default Action is caMinimize. If a MDI child form does not have these settings, the default Action is caNone, meaning that nothing happens when the user attempts to close the form.

Para finalizar, lo que comentas de los errores... no sé, ¿puede ser que los destriuyas en más de un sitio? ¿que accedas a la variable despues de destruirla?¿Que apliques los dos métodos antes mencionados sobre el mismo form? Si nos das más datos seguro que te podemos ayudar más...

gynch 26-03-2004 10:57:28

En el método close cambia la accion por cafree

Código:

 
procedure TFSystem.FormClose(Sender: TObject; var Action: TCloseAction);
begin
        Action:=cafree;
end;


Lepe 26-03-2004 12:18:54

Y para crear un formulario hijo.
En project --> options --> forms, deben estar en Available

y crearlos de alguna de estas formas:
Código:


  FrmPepe := TFrmPepe.Create(Self);

o bien

  Application.CreateForm(FrmPepe, TFrmPepe);

si son formularios Hijos, se mostraran tan pronto se hayan creado sin tener que hacer un FrmPepe.Show, si por el contrario es un formulario normal, dependerá de su propiedad Visible si está a True o False (o eso creo).

Saludos


La franja horaria es GMT +2. Ahora son las 04:22:02.

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