Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
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
  #2  
Antiguo 30-12-2006
Choclito Choclito is offline
Miembro
 
Registrado: jul 2004
Posts: 169
Poder: 22
Choclito Va por buen camino
consultando nuevamente

Muchas gracias por la respuesta Lepe especialmente por tus sugerencias pero te comento que el codigo que puse estaba en el proyecto de la aplicacion, luego que para no tener problemas con el Splashscrenn lo puse como comentario para asi no me muestre y confirme si el causante del error es la creacion del Splashcreen y te comento q me sigue dando el error
Como puedo saber donde estoy cometiendo el error??pues me sigue marcando el error:
Código Delphi [-]
  if FOwner <> nil then FOwner.RemoveComponent(Self);
  inherited Destroy;
Porfavor quisiera q me den una ayuda o sugerencia para poder encontrar el error pues cuando lo llevo a otras maquinas cuando cierro la aplicacion me sale un error de envio de error
Y muchas gracias por el comentario que lo tendre muy encuenta
Para que la aplicacion no sea pesada la creacion dinamica de forms como tendria q hacerla un pequeño ejemplo podria ser??? disculpa por lo novato de lo pregunto pero comentarles q recien me estoy iniciando en desarrollar aplicaciones
Responder Con Cita
  #3  
Antiguo 30-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
El error no está en el código, el error es de concepto. Lo dije para el SplashScreen, pero es aplicable a todas las ventanas / objetos que usas en tu aplicación.

Para la creación dinámica, puedes usar este hilo, como otros tantos que hay en el foro.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 02-01-2007
Choclito Choclito is offline
Miembro
 
Registrado: jul 2004
Posts: 169
Poder: 22
Choclito Va por buen camino
gracias por responder

Muchas gracias por el comentario Lepe q lo tomare en cuenta de ahora en adelante, pero que truco o como puedo hacer para q ya no me salga ese error debido a q son muchas las formas y lo unico q faltaba a la aplicacion era lo de seleccionar el Servidor de base de datos.
El cambiar de concepto y las razones las comprendi pero lo quieren ya nomas y como lo puedo arreglar
Muchas gracias por las sugerencias y ayuda q me brinden
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 20:48:21.


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