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 30-03-2009
Lizette Lizette is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Lizette Va por buen camino
Diferencia de crear formularios con Create(self) y con Application.CreateForm

Hola a todo el foro, tengo una duda cuando creo formularios dinámicamente se crean con:
Código Delphi [-]
Form1:=TForm1.Create(self);

Pero también se pueden crear con:
Código Delphi [-]
Application.CreateForm(TForm1, Form1);

O cuál es la diferencia entre estas dos sentencias?

Gracias y saludos..

PD: Mi aplicación consta de más de 20 formularios y se tarda bien mucho en cargar, y quiero que la carga sea más rápida.. Pero como paso informacion entre formularios al seleccionar una opción creo los form que voy a necesitar para ejecutar dicha opción, y al salir de la misma libero los form creados.

La incógnita es, es vieble hacerlo con Application.CreateForm(TForm1, Form1)??

De antemano gracias
Responder Con Cita
  #2  
Antiguo 30-03-2009
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Todo se resume en quién es el "dueño" ("owner") del formulario, esto es, quién es el encargado de liberarlo, cuando a su vez sea liberado. Si asignas como dueño de un formulario a otro, como cuando creas un formulario usando "Self" (otro formulario) como "dueño", dicho formulario será liberado automáticamente, cuando el formulario "dueño" sea liberado a su vez.

Si sigues el método "Application.CreateForm()", verás que al formulario que se crea se le asigna como dueño el mismo objeto "Application", de modo que el formulario será liberado, automáticamente, cuando el objeto "Application" sea liberado a su vez. Piensa que incluso puedes crear un formulario de este modo:

Código Delphi [-]
with TSampleForm.Create(nil) do
begin
  try
    ShowModal();
  finally
    Free();
  end;
end;

Con "nil" no estás asignando ningún dueño para el formulario "TSampleForm", de modo que en este caso hemos de ser nosotros mismos quienes nos encargamos de liberarlo, y así lo hacemos más abajo, como puedes ver.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 30-03-2009
Lizette Lizette is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Lizette Va por buen camino
Haber si te entendi entonces lo que yo hago es lo siguiente (pero me marca error ):

En un Form1, cuando doy click a la opcion 1 hago lo sig:

Código Delphi [-]
//Se crean los Formularios necesarios para ejecutar la opcion 1
Form2:=Form2.Create(nil);
Form3:=Form2.Create(nil);
Form4:=Form2.Create(nil);
Form5:=Form2.Create(nil);
Form6:=Form2.Create(nil);
Form7:=Form2.Create(nil);
FormOp1.Show;//Manda llamar el menu de opcion 1

Una vez dentro del menu puedo ejecutar cualquier operacion y mandar llamar a Form2,3,4,5,6,7 previemente creados. Cuando dentro del menu le pongo salir, hago:

Código Delphi [-]
Form2.Free;
Form3.Free;
Form4.Free;
Form5.Free;
Form6.Free;
Form7.Free;
//Para liberar los form creados para la opcion elegida

Pero cuando dentro del menu de la opcion 1 mando llamar a Form2.Show, me marca error.. De que no existe esa direccion de memoria

Que hacer??
Responder Con Cita
  #4  
Antiguo 30-03-2009
Lizette Lizette is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Lizette Va por buen camino
Se supone q si le doy salir, me libera todo, y me regresa al menu de opciones, pero si ejecuto cualquier form creado previamente, me deberia de visualiar el form.. y no lo hace
Responder Con Cita
  #5  
Antiguo 30-03-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Prueba con:
Código Delphi [-]
 Form2:=TForm2.Create(nil);
en lugar de:
Código Delphi [-]
 Form2:=Form2.Create(nil);

Estás llamando a la instancia en lugar de a la clase para el Create. Igual para el resto de llamadas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
CreateForm demasiado lento kverna Varios 6 06-03-2008 14:32:14
Crear formularios de forma dinamica istradlin Lazarus, FreePascal, Kylix, etc. 4 06-12-2007 15:30:40
Tapplication CreateForm jlrbotella OOP 1 21-08-2007 11:32:51
Crear una Dll con mudulos y formularios mcarazas Varios 3 10-06-2006 04:02:21
Crear formularios en tiempo de ejecución Caro Varios 2 25-08-2005 14:27:39


La franja horaria es GMT +2. Ahora son las 06:36:08.


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