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-10-2005
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Question Más sobre las SplashScreen

Hola de nuevo a tod@s

Estoy intentando aplicar lo que explicais por estos foros a una SplashScreen que me he creado, pero me encuentro con el problema de que si se pulsa sobre ella, actúa como el MainForm y me salta el error de raised exception .. bla, bla, bla ... Cannot focus a disables or invisible window (Form_Main)'

Lo he solucionado poniendo la propiedad "Enabled := false;", pero no se si lo estoy haciendo bien ¿hay alguna otra forma de hacerlo?
Código Delphi [-]
      Application.Initialize;
      SplashForm := TSplashForm.Create(Application);
      SplashForm.Show;
      SplashForm.Update;
      Application.CreateForm(TForm_Main, Form_Main);
      Application.CreateForm(TForm_Msg, Form_Msg);
      SplashForm.Free;
      Application.Run;

Tambien he optado por quitar de ahi la eliminación del Splash y ponerlo en el método Show del Form_Main (para eliminarla cuando se visualice éste)
Código Delphi [-]
Application.Initialize;
SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
SplashForm.Update;
Application.CreateForm(TForm_Main, Form_Main);
Application.CreateForm(TForm_Msg, Form_Msg);
Application.Run;
 
 
 unit frmMain;
 interface
 uses
 { uses mios que deben ponerse aqui }
   frmSplash, { SplashForm }
 .....
 .....
 
 procedure TForm_Main.Form_OnShow(Sender: TObject);
 begin
 .....
 { eliminar el SpashScreen }
   SplashForm.Hide;
   SplashForm.Free;
 end;
Saludos
salvica
Responder Con Cita
  #2  
Antiguo 30-10-2005
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,

No creo que tengas que hacer nada sobre la "Splash Screen" en el formulario principal. De todas formas en tu código se pueden ver cosas "mejorables", a tenor de lo que Zarko Gajic cuenta en su artículo "Creating a Splash Screen in Delphi applications" (en inglés). Échale un vistazo, a ver si te aclara algunas cosas, creo que merece la pena.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 30-10-2005
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Hola Dec, ante todo gracias por reponder tan rápido

He mirado el enlace que has puesto, y solo diferencio la posición donde se inicializa la aplicación. He cambiado el código a
Código Delphi [-]
       // Application.Initialize; //-----> posición original
       SplashForm := TSplashForm.Create(Application);
       SplashForm.Show;
       Application.Initialize; //-------> Zarko dice que aquí
       SplashForm.Update;
       Application.CreateForm(TForm_Main, Form_Main);
       Application.CreateForm(TForm_Msg, Form_Msg);
       Application.CreateForm(TForm_Metars, Form_Metars);
       SplashForm.Hide;
       SplashForm.Free;
       Application.Run;
y ahora visualiza el Splash y cierra la aplicación en cuanto se oculta

¿Por? (creo que esto lo he visto reflejado en el foro, voy a buscarlo)
Gracias y se siguen admitiendo ayudas
salvica

Pdta.:
Me he colado, tenía abierto el proceso en segundo plano y se cerraba por eso (es que evito dobles instancias)

Al pulsar sobre el Splash, me vuelve a sacar el mensaje inicial de error de foco, por lo que solo veo la opción de desactivarla

Última edición por salvica fecha: 30-10-2005 a las 08:39:29.
Responder Con Cita
  #4  
Antiguo 30-10-2005
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,

No sé qué puede ocurrir, pero, si echas un vistazo al adjunto verás que todo va como se espera... vamos, hasta nueva orden por lo menos.
Archivos Adjuntos
Tipo de Archivo: zip ejemplo.zip (2,6 KB, 67 visitas)
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 30-10-2005 a las 08:56:37. Razón: Actualizar el archivo adjunto.
Responder Con Cita
  #5  
Antiguo 30-10-2005
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Nos hemos cruzado

Cuando yo he editamo el mensaje anterior y he leido el tuyo, tu estabas editando tu mensaje para cambiar el código del proyecto

Lo dicho, me aparece el error inicial
Responder Con Cita
  #6  
Antiguo 30-10-2005
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,

Pero tú puedes ver en el ejemplo que adjunté más arriba cómo puedes "tocar", "pulsar" en la "Splash Screen" sin que esto suponga ningún error... Entonces, tal vez el problema no esté en la "Splash Screen", ni en cómo estás mostrándola, sino que puede estar en otro lado. No sé... Supongo que si estás llevando a cabo en la creación del formulario principal (evento "OnCreate"), o cuando lo muestras o en otro lugar, o quizá otros formularios... no digo nada, pero, si algo se me ocurre es que el error no provenga de la "Splash Screen".
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 30-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Intuyo que en el SplashForm tienes algun código escrito, porque hacer un clic sobre el SplashForm, no debe hacer nada. Si al hacer un clic intentas cerrarlo o pasar el foco a otra ventana, y ésta no ha sido creada, es lógico que salte una excepción.

No debes hacer referencias a la SplashForm en ninguna otra parte de tu proyecto, solo en la opción de "Acerca de ..." para crearlo de nuevo.

Yo, en principio, siempre he usado:
Código Delphi [-]
       Application.Initialize; 
       SplashForm := TSplashForm.Create(nil);
       SplashForm.Show;

       SplashForm.Update;
       Application.CreateForm(TForm_Main, Form_Main);
       Application.CreateForm(TForm_Msg, Form_Msg);
       Application.CreateForm(TForm_Metars, Form_Metars);
       FreeAndNil(SplashForm);
       Application.Run;
Como ves hay ciertas diferencias, pero son para controlar posibles errores.


saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 30-10-2005
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
[b]Hola Dec, perdona pero salí de trabajar y me fui a la cama (llevaba 28 horas + una de propina por el cambio de horario)

El splash solo muestra un logotipo y un mensaje de bienvenida, mientras se ejecuta el Form_Main (compueba las tabla de trabajo, limpia registros viejos y subdirectorios de datos, etc) por lo que no lleva ningún código (solo la definición de las etiquetas e iconos) y como el form principal tarda unos 10 segundos en abrirse, no necesito retardarlo

Como decía en la pregunta inicial, si al splash le pongo la propiedad enabled := false; me deja abrir otras aplicaciones (navegador, excel, etc) e incluso pulsar sobre él sin problemas (solo que aparecen las fuentes difuminadas, por la cuestión del enabled, pero esto es solucionable con un poco más de trabajo)

Si le pongo enabled := true;, entonces, simplemente con abrir el navegador, me salta el error de pérdida de foco (o que quiere dar el foco al main, que aún está oculto)

En fin, tendré que rehacer el proyecto y ver en que zona estoy metiendo la pata
Saludos y gracias
salvica

Última edición por salvica fecha: 30-10-2005 a las 23:10:32.
Responder Con Cita
  #9  
Antiguo 31-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Inequivocamente, las pruebas que has hecho te tienen mareado.

El tema está en que en el evento OnShow, no se puede llamar a Hide. En principio, no para el mismo formulario que se está mostrando, no he probado a esconder otro (como haces tu con el Splash). Dicho sea de paso, no tienes que hacer un .Hide para despues hacer un .Free, puedes llamar directamente a .Free.

Supongo que las tareas de mantenimiento que hablas, las haces en el MainFormCreate, pues en ese evento, puedes poner el FreeAndNil(Splash) como última instrucción y quitarla del dpr.

Insisto: deja Enabled a True desde un principio en diseño, y no lo toques.

Revisa mi codigo, ya que el Splash se crea con el parámetro nil para que nadie lo destruya, y por eso tienes que usar el FreeAndNil (que es más seguro que el .Free).

Es tan lioso, porque puedes hacer lo que quieras en 3 sitios distintos, organizate y despues lo pones en marcha.

Espero que te haya aclarado algo en lugar de liarte más.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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


La franja horaria es GMT +2. Ahora son las 03:15:30.


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