![]() |
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?
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) Saludos salvica |
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. |
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 y ahora visualiza el Splash y cierra la aplicación en cuanto se oculta :confused::confused::confused: ¿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, :mad::mad::mad: 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 |
1 Archivos Adjunto(s)
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. ;) |
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 |
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". |
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: Como ves hay ciertas diferencias, pero son para controlar posibles errores. saludos |
[b]Hola Dec, perdona pero salí de trabajar y me fui a la cama :p (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 :D Saludos y gracias salvica |
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 |
La franja horaria es GMT +2. Ahora son las 07:24:47. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi