Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-08-2005
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
Creacion y destruccion de forms

Hola, grandioso foro.

Tengo la siguiente GRAN duda.

Estoy realizando un proyecto y a medida q va creciendo, oviamente tarda mas en cargar , debido a la auto-creacion de los forms.

Tengo entendido que debo crear los forms y destruirlos a medida q los voy
utilizando, y he aqui mi gran problema. He visto otros hilos sobre esto, y he leido algunos libros al respecto, pero no he dado con la tecla

He sacado los forms de las opciones auto-create del proyecto y dentro
del codigo he puesto:

Código:
    try
        Application.CreateForm( tf_Listas, f_Listas);
        f_Listas.ShowModal;
    finally
        f_Listas.Destroy;
    end;
Asi esta bien, esta es la manera correcta???
Cual es la diferencia entre ShowModal y Show?
Se debe hacer Destroy o Free??

Si lo hago de la manera descrita arriba, el formulario se abre correctamente,
y me muestra los controles q tengo en él, sin embargo, cuando ejecuto un
query y muestro los datos ( deberia ), en un rxgrid, se cierra el formulario
y vuelve al menu principal. :confused

Cualquier ayuda sera bienvenida.
Saludos.
Leo.
Responder Con Cita
  #2  
Antiguo 31-08-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues de la manera en que lo creas, bastará con que en el evento OnClose del mismo pongas:
Código Delphi [-]
Action:=CaFree;

En cuanto a Show y ShowModal, como su nombre indica la segunda instrucción lo abre de forma modal es decir no podrás abandanor el formulario hasta que lo cierres o pulses en alguno de los controles que hayas habilitado.

Un Saludo
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 01-09-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
La diferencia entre Free y Destroy, es que Free verifica si tu formulario existe (Self <> nil). Por lo que es preferible llamar a Free.

La otra forma es hacer (como comenta Marcos) Action:=CaFree; esto es identico a llamar a Release. La ventaja de esto es que se genera un mensaje al formulario pidiendo que se destruya, muy util cuando se esta dentro del formulario (como en el evento OnClose).

Pero este último es mas lento, dado que se genera un mensaje el cual tiene que ser procesado y demas para recien liberarse.

Para tu caso, lo que yo prefiero es llamar a Free.
__________________
[Crandel]
Responder Con Cita
  #4  
Antiguo 01-09-2005
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
Gracias a ambos x sus respuestas.

Saludos.
Responder Con Cita
  #5  
Antiguo 01-09-2005
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
Sobre la misma duda:
Alguno de Uds sabria decirme porque se me cierra solo el formulario,
si lo hago de esa manera, modal y no autocreate??.
Me muestra bien los controles pero luego de ejecutar un query y cuando
deberia mostrar los datos en una grilla, se cierra el form

Gracias.
Responder Con Cita
  #6  
Antiguo 01-09-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Supongo que ejecutas la consulta pulsando en un botón, en este caso mirate la propiedad ModalREsult del mismo, por ahí puede venir la solución.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 01-09-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Crandel
Free verifica si tu formulario existe (Self <> nil)
Una pequeña aclaración. La existencia del formulario no es equivalente a que sea distinto de nil. Free únicamente verifica esto último. Si el formulario ya ha sido destruido y vuelve a aplicarse Free sobre la variable, muy probablemente se obtendrá una violación de acceso.

// Saludos
Responder Con Cita
  #8  
Antiguo 01-09-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Cita:
Empezado por roman
Una pequeña aclaración. La existencia del formulario no es equivalente a que sea distinto de nil. Free únicamente verifica esto último. Si el formulario ya ha sido destruido y vuelve a aplicarse Free sobre la variable, muy probablemente se obtendrá una violación de acceso.
Tenes razón, se obtiene una violación de acceso.

Lo que se podría hacer para evitar eso (si la creación y destrucción estan por separados) es poner despues de free Form2 := nil;
__________________
[Crandel]
Responder Con Cita
Respuesta



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 02:06:21.


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