Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #7  
Antiguo 29-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
En principio no es buena idea crear todas las ventanas desde el principio de la aplicación, es una sobrecarga innecesaria. Lo óptimo es crear dinámicamente las ventanas que vas abriendo y cuando se cierre, que se libere la memoria. Así aligeramos la carga de la aplicación y además no supone "esperas" cuando se crea una ventana determinada, (no tarda tanto como se suele suponer).

Pasando un poco de ese tema, vamos al grano. No se trata de esa ventana, sino de la filosofía que usas:

Código Delphi [-]
 SplashScreen:=TSplashScreen.Create(application);
  SplashScreen.Show;
  SplashScreen.Hide;
  SplashScreen.Free;
En la primera línea estas diciendo que el objeto "Application" es el encargado de destruir la ventana Splash, sin embargo, en la última línea, te encargas tú de liberarla, por tanto, cuando la aplicación se cierre al completo, irá a destruir un objeto que ya fue liberado con el error que te da.

Hay varias formas para solventar esto, te comento ambas porque te será necesario.

Lo que no me gusta, pero funciona sin problemas:
Código Delphi [-]
 SplashScreen:=TSplashScreen.Create(application);
  SplashScreen.Show;
  SplashScreen.Hide;
  FreeAndNil(SplashScreen);
Aqui decimos que el objeto Application será el encargado de destruir el Splash, pero nosotros (que necesitamos liberarlo antes de que se cierre la aplicación), lo liberamos con FreeAndNil (mira la ayuda). De esta forma, cuando el objeto Application vaya a destruir a Splash, se "da cuenta" de que ya ha sido liberada y no hace nada (no provoca el error de antes).

Lo que si me gusta y uso a menudo (me gusta tener el control de todo ):
Código Delphi [-]
 SplashScreen:=TSplashScreen.Create(nil);
  SplashScreen.Show;
  SplashScreen.Hide;
  FreeAndNil(SplashScreen);

Ahora en la primera línea le decimos a Delphi que nadie (nil) se encargará de destruir la ventana, porque yo mismo me encargo de ello.

Además uso FreeAnNil como respaldo, es decir, si necesito mostrar el splashScreen en un momento dado, puedo preguntar si ha sido creado o no:
Código Delphi [-]
  if not Assigned(SplashScreen) then //  (si no ha sido creada, la creo yo)
    SplashScreen := TSplashScreen.Crete(nil);

  SplashScreen.Show; // por último se muestra

Tendrás que mirar estos detalles, por si liberas alguna forma / informe de quickreports / etc antes que el objeto Application.

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



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
aplicación cliente servidor? Giniromero Conexión con bases de datos 12 25-10-2006 04:39:18
Aplicacion Cliente-Servidor D-MO Varios 2 01-09-2005 00:37:42
Aplicación Cliente Servidor NickName Internet 3 23-07-2004 15:07:22
Aplicacion cliente servidor aguilot_21 Internet 3 26-12-2003 02:07:55
Aplicacion Cliente - Servidor GIVO Conexión con bases de datos 0 30-07-2003 23:33:14


La franja horaria es GMT +2. Ahora son las 22:34:24.


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