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 26-03-2004
Lionel Lionel is offline
Miembro
 
Registrado: mar 2004
Posts: 36
Poder: 0
Lionel Va por buen camino
Question 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!!
Responder Con Cita
  #2  
Antiguo 26-03-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 21
marto Va por buen camino
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...
__________________
E pur si muove
Responder Con Cita
  #3  
Antiguo 26-03-2004
gynch gynch is offline
Miembro
 
Registrado: mar 2004
Posts: 13
Poder: 0
gynch Va por buen camino
En el método close cambia la accion por cafree

Código:
  
procedure TFSystem.FormClose(Sender: TObject; var Action: TCloseAction);
begin
	 Action:=cafree;
end;
Responder Con Cita
  #4  
Antiguo 26-03-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
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


La franja horaria es GMT +2. Ahora son las 21:27: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