[Lazarus-es] ¿Como hacer un Splash screen...?

José Mejuto joshyfun en gmail.com
Mie Dic 29 22:06:30 CET 2010


Hello Walter,

Wednesday, December 29, 2010, 9:04:08 PM, you wrote:

W> Si...también lo vi, pero hay algo que falta...yo tengo dos form, el splash y
W> el principal, lo usé para mi ejemplo y me daba un error como que no existía
W> el splash.Usé el .lpr de ese link...algo me está saliendo mal...
W> El splash lo pongo en el autocreate, pero, el form principal, también hay
W> que "autocrearlo" ?

A ver, para hacer un splash, no necesitas el estilo splash, eso es
simplemente para que salga por encima de todas las demás ventanas (si
mal no recuerdo).

Un buen modo de hacerlo es diseñas el splash y el formulario principal
(o más si hay). Vas al "autocreate" y pones el splash de primero, y
luego el principal de segundo y detrás el resto si hay.
Yo luego al principal le añado un Timer con 500 ms. y con
enabled:=false. Luego en el OnShow del principal hago:

procedure MyForm.OnShow(...)
begin
  if Assigned(frmSplash) then SplashTimer.Enabled:=true;
end;

Y en el evento OnTimer del Timer pongo:

procedure TTimer1.OnTimer(....)
begin
  FreeAndNil(frmSplash);
  TTimer1.Enabled:=false;
end;

De este modo consigues que el splash salga al principio de todo, y que
se quede 1/2 segundo visible después de que cargue el formulario
principal, asegurando que el splash no aparezca/desaparezca muy rápido
y de la sensación de que ha sucedido un error.

En el .lpr puedes necesitar (especialmente si no es Windows) meter
después de la linea que crea el splash, un "frmSplash.Show;
Application.ProcessMessages;" para que se dibuje el splash por
completo.

La secuencia de eventos que suceden es:

1) Se crea el splash.
2) Se muestra el splash.
3) Se crea el principal.
4) Se muestra el principal.
5) Se ejecuta OnShow del principal, activando el timer.
6) 500 ms después de desactiva el timer, y se elimina el splash Y se
pone la variable del splash a NIL de modo que aunque se vuelva a
ejecutar el OnShow del principal el timer no se activará de nuevo.
  
-- 
Best regards,
 José





More information about the Lazarus-es mailing list