Club Delphi  
    Paypal   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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 28
Caral Va por buen camino
Hola
Aparte de lo que te han comentado, no es conveniente hacer un llamado a un form sin luego destruirlo o liberarlo, asi no ocupa memoria, es como si lo tuvieras en el proyecto lo que alenta el programa.
Esta es la mejor forma de hacerlo:
Código Delphi [-]
 Form2:=TForm2.Create(self);
   try
      Form2.ShowModal;
   finally
      Form2.Free;
   end;
Se crea y luego se libera.
Saludos
Responder Con Cita
  #2  
Antiguo 21-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.070
Poder: 32
jhonny Va camino a la famajhonny Va camino a la fama
Bueno, yo prefiero el siguiente metodo...

Código Delphi [-]
   Form2:=TForm2.Create(self);
   try
      Form2.ShowModal;
   finally
      Form2.Release; //<-- Release en lugar de Free.
   end;

Free destruye un objecto y si es necesario destruye los componentes asociados a él, según la ayuda dice que free llama al Release en el caso de los formularios.

Release espera a que se destruyan todos los componentes asociados a la forma para poder destruir la forma.

Sinceramente yo prefiero asegurarme del asunto y usar Release directamente.

Y bueno, no soy excelente con el ingles pero en la ayuda dice lo siguiente:

Cita:
Release does not destroy the form until all event handlers of the form and event handlers of components on the form have finished executing. Release also guarantees that all messages in the form's event queue are processed before the form is released. Any event handlers of the form should use Release instead of Free. Failing to do so could lead to an access violation.
Según yo, allí dice que es recomendable usar Release en lugar de Free para este caso .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 21-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Hasta donde yo tenía entendido (aprendido de estos foros), es que Release debe llamarse desde un método de la propia clase, no desde fuera, de hecho lo dice aquí:
Cita:
Any event handlers of the form should use Release instead of Free
Esto si está bien:
Código Delphi [-]
procedure TForm1.Button1Click
begin 
  Release;
end;

Esto funciona, pero quizás no como uno espera (lo explico más adelante)
Código Delphi [-]
procedure TForm1.Button1Click
begin 
  Form2.Release;
end;

Atacando la ayuda:
Cita:
Note:
Release returns immediately to the caller. It does not wait for the form to be freed before returning
porque su implementación es:
Código Delphi [-]
procedure TCustomForm.Release;
begin
  PostMessage(Handle, CM_RELEASE, 0, 0);
end;
Lo que quiere decir que tras una llamada a Release, no está garantizado que la ventana se haya destruido completamente, y este punto es importante.

Se podría llamar a Release, y la ventana seguir en pantalla durante 3 minutos, porque está realizando un proceso largo, o tiene mensajes pendientes en su cola de mensaje (incluso mensajes de repintado de la pantalla que, dado que queremos destruirla, no tiene sentido que se realicen).

Al llamar a Free, se está obligando a liberar todos los componentes que haya en el Form, cortando el flujo de mensajes y destruir todo inmediatamente. Además no se procesarán todos los mensajes de la cola de espera (por tanto, los mensajes de repintado, jamás se realizarán). Después de llamar a Free, si está garantizado que la ventana se ha liberado.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 21-11-2007 a las 17:07:39.
Responder Con Cita
  #4  
Antiguo 21-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.070
Poder: 32
jhonny Va camino a la famajhonny Va camino a la fama
En la ayuda de Delphi en su topico Free, dice lo siguiente:

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, don’t free a button, or the form that owns the button, in its OnClick event handler.

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.
En el ultimo parrafo dice que hay que llamar a Release cuando queremos liberar un TForm, aunque antes de este parrafo hay uno haciendo referencia a que no debe llamarse a Free dentro del propio componente o su padre, no me parece que el segundo este relacionado con el primero (Quizá sea un error de apreciación en la lectura de parte mia).

Pero si relaciono lo que dice la ayuda con lo que acabas de explicarnos, termino por pensar que lo que dice la ayuda sería aplicable en el caso del action:=caFree; (Segun Marteens http://www.marteens.com/answ02.htm esto llama a Release) que estamos acostumbrados a colocar dentro del OnClose de un TForm. De hecho el mismo marteens te da la razón con dicho articulo . Gracias por la aclaración Lepe.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 22-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Cita:
Empezado por jhonny Ver Mensaje
De hecho el mismo marteens te da la razón con dicho articulo .
Si, es que Ians Marteens es un copión
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Intraweb y ShowModal PatrickM Internet 8 04-10-2018 21:52:18
Showmodal desde MDI pfsoft Varios 1 26-07-2006 09:07:15
MDIChild y ShowModal Neia OOP 3 03-07-2005 15:50:08
Error con ShowModal el_barto Varios 7 04-06-2005 17:51:44
Problemas con Showmodal ivanmm Varios 2 31-10-2003 16:12:08


La franja horaria es GMT +2. Ahora son las 18:49:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi