Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Diferencia de crear formularios con Create(self) y con Application.CreateForm (https://www.clubdelphi.com/foros/showthread.php?t=64378)

Lizette 30-03-2009 00:04:22

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)??:confused:

De antemano gracias

dec 30-03-2009 00:28:48

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. ;)

Lizette 30-03-2009 02:24:33

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:confused:

Que hacer??

Lizette 30-03-2009 02:26:56

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 :mad:

Neftali [Germán.Estévez] 30-03-2009 08:46:44

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.


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