Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pregunta ? Create !! (https://www.clubdelphi.com/foros/showthread.php?t=52803)

pmtzg 31-01-2008 17:07:40

Pregunta ? Create !!
 
Hola a todos los del foro
quiero comentarles el siguiente dilema que tengo !!
tengo un programa que uso con menus

cuando ejecuto un form1 lo hacia de la siguiente manera:

Código Delphi [-]
 
Form1:=TForm1.Create(self);
  try
    Form1.ShowModal;
  finally
    Form1.Free;
  end;

aqui filtro información para extraer información de una base de datos
y lo mando a crystal report y bien lo hacia muy bien sin problema
si cierro el reporte y vuelvo a ejecutar el filtro
me mandaba un error de Access violatioin 0000000f5

aqui en el foro me comentaron ponlo de la siguiente manera :

Código Delphi [-]
 
with TForm1.Create(nil) do
    try
      Showmodal
    Finally
      Free
    end

y listo , ejecuto el form y lo hace , cierro el reporte y vuelvo ajecutar
y ya no me mando error, ingreso datos en los edit para filtrar mi información
y a la hora de aceptar para que ejecute el programa , me manda el
mensaje de error que :

el Reporte.rpt no puede conectar la base de datos

cierro el form y lo vuelvo abrir, ingreso datos y ya no me marca el error
y saca el reporte

volvi a hacerle el siguiente cambio :

Código Delphi [-]
 
Form1:=TForm1.Create(nil);
  try
    Form1.ShowModal;
  finally
    //Form1.Free;
  end;

nada mas que aqui omito el Form1.free

y ejecuto el form saco el primer reporte , cierro reporte y vuelvo ajecutar
y vuelve a salir el reporte y con esta opción no me marca ningun tipo de
Error,
mi Pregunta es la siguiente:

si no destruyo la contrucción que problema me puede acarrear
o puedo cambirar el Self, Nil por alguna otra que cuando le diga Form1.Free
y vuelva a ejecutar mi form1 no me marque ningun problema ??

Espero sus comentarios porque me marca esos error y porque
al no ejecutar el Form1.free me deja trabajar sin problema

Gracias por su tiempo

Caral 31-01-2008 17:23:22

Hola
Aqui hay varias cosas que creo que tanto en este hilo como en el anterior no se comentaron.
En el programa los form tienen varias maneras de crearse, entre ellas:
1-directamente, esta es cuando en el proyecto esta incluido el form, osea que al iniciarse el form se crea automáticamente.
Si se usa esta forma el form es llamado simplemente con un form.show, ya que este esta creado de antemano.
2-Creando y destruyendo el from, esta es la opcion que muestras en el codigo:
Código Delphi [-]
Form1:=TForm1.Create(self);
  try
    Form1.ShowModal;
  finally
    Form1.Free;
  end;
Es efectiva si hay en el proyecto muchos forms, agiliza la carga.
3- Para mi la esta opcion (me puedo equivocar para variar):
Lo que dice es que si el from NO ha sido creado, por eso el NIL (nulo), se muestre y posteriormente se libere.
Código Delphi [-]
 
with TForm1.Create(nil) do
    try
      Showmodal
    Finally
      Free
    end

Entonces viendo estas tres opciones (por supuesto también se puede crear por codigo y otros) esencialmente hacen lo mismo.
1- crea inmediatamente, no destruye.
2- crea cuando se necesita y destruye
3- crea si no esta creado con anticipación y destruye.
Bueno es una opinión mas.
Saludos


La franja horaria es GMT +2. Ahora son las 11:13:55.

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