Skip to content

Crear Splash Screen en Delphi

Un toque profesional para nuestras aplicaciones de escritorio, es darle un buena presentación, y nada mejor que con una Splash Screen.

Técnicamente, un Splash Screen no es más que un formulario con una imagen que lo cubre por completo, dando la bienvenida al usuario.

Tipos de Slpash Screen

Los diferentes tipos de Splash Screen no están totalmente definidos y no tienen un nombre, pero podemos definir tres tipos principales:

Bienvenida: Los Splash Screen más comunes son los de bienvenida. Por lo general, son imágenes que muestran el logo de la aplicación, el nombre, la versión, el autor, entre otros datos.

Registración: Si la aplicación necesita algún tipo de registración o tiempo restante de la demo, se utiliza éste para recordarlo al usuario.

Procesos: Si nuestra aplicación necesita algún tipo de informe sobre el progreso de algún proceso, por ejemplo carga de datos, conexión a un servidor remoto, entre otros, generalmente se utiliza el Splash Screen para mostrar al usuario su progreso.

Como se crea un Splash Screen

Vamos a tomar como ejemplo el Splash Screen que he creado para la aplicación Word Counter – SEO Tools que estamos creando en este portal.

Lo primero que debemos hacer es crear un formulario con las siguientes propiedades:

//Propiedades del Formulario para el Splash
BorderStyle = None
BorderIcons = [];
Fill.Bitmap.Bitmap = 'la imagen que querramos para nuestro Splash'
Position = ScreenCenter

Luego, ingresamos al menú Project -> Options y dentro de las opciones ingresamos a Application -> Forms, en el cuadro de las opciones de los formularios, vamos a colocar al formulario llamado (en nuestro caso) FSplash, como Available Forms como lo mostramos en la siguiente imagen.

Splash Screen Config

En nuestro cuadro del Proyecto, presionamos el botón derecho del mouse sobre el proyecto y elegimos la opción View Source o presionamos Ctrl+v para poder visualizar el código de nuestro proyecto.

Splash Screen View Source

Les aparecerá algo como el siguiente código, todo depende de los formularios que ustedes tengan creados en su aplicación.

program WordCounter;

uses
  System.StartUpCopy,
  FMX.Forms,
  UConfig in 'UConfig.pas' {FConfig},
  UAbout in 'UAbout.pas' {FAbout},
  UPrincipal in 'UPrincipal.pas' {FPrincipal},
  USplash in 'USplash.pas' {FSplash},
  UKeywordsMining in 'UKeywordsMining.pas' {FKeywordMining};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TFPrincipal, FPrincipal);
  Application.CreateForm(TFConfig, FConfig);
  Application.CreateForm(TFAbout, FAbout);
  Application.CreateForm(TFKeywordMining, FKeywordMining);
  Application.Run;
end.

A este código le vamos a realizar el siguiente cambio:

program WordCounter;

uses
  System.StartUpCopy,
  FMX.Forms,
  UConfig in 'UConfig.pas' {FConfig},
  UAbout in 'UAbout.pas' {FAbout},
  UPrincipal in 'UPrincipal.pas' {FPrincipal},
  USplash in 'USplash.pas' {FSplash},
  UKeywordsMining in 'UKeywordsMining.pas' {FKeywordMining};

{$R *.res}

begin
  FSplash := TFSplash.Create(Application);
  FSplash.Show;

  Application.Initialize;
  Application.CreateForm(TFPrincipal, FPrincipal);
  Application.CreateForm(TFConfig, FConfig);
  Application.CreateForm(TFAbout, FAbout);
  Application.CreateForm(TFKeywordMining, FKeywordMining);

  FSplash.Hide;
  FSplash.Free;

  Application.Run;
end.

Hasta aquí todo perfecto, pero si ejecutamos nuestra aplicación y dependiendo de la velocidad de nuestra PC, el tiempo en que se muestre el Splash Screen variará entre muy mocos milisegundos hasta algunos milisegundos, jeje o sea que no se si alcanzaremos a ver algún pantallazo de nuestra bienvenida.

Para que nuestro Splash Screen se pueda ver algunos segundos, vamos a ingresar el siguiente código.

En el formulario FSplash agregamos una variable global llamada vCompletado de la siguiente manera:

  public
    { Public declarations }
    vCompletado: Boolean;

Y la inicializamos en el evento onShow del formulario:

procedure TFSplash.FormShow(Sender: TObject);
begin
  vCompletado := False;
end;

En el Formulario FSplash, agregamos un TTimer con las siguiente opciones:

Enabled = True
Interval = 3000
Name = TmrSplash

Y en el evento onTimer del Timer agregamos el siguiente código:

procedure TFSplash.TmrSplashTimer(Sender: TObject);
begin
  vCompletado := True;
end;

En el código fuente de nuestro proyecto, agregamos el código para que verifique si se ha ejecutado el Timer del formulario FSplash para seguir ejecutando la aplicación.

program WordCounter;

uses
  System.StartUpCopy,
  FMX.Forms,
  UConfig in 'UConfig.pas' {FConfig},
  UAbout in 'UAbout.pas' {FAbout},
  UPrincipal in 'UPrincipal.pas' {FPrincipal},
  USplash in 'USplash.pas' {FSplash},
  UKeywordsMining in 'UKeywordsMining.pas' {FKeywordMining};

{$R *.res}

begin
  FSplash := TFSplash.Create(Application);
  FSplash.Show;

  Application.Initialize;
  Application.CreateForm(TFPrincipal, FPrincipal);
  Application.CreateForm(TFConfig, FConfig);
  Application.CreateForm(TFAbout, FAbout);
  Application.CreateForm(TFKeywordMining, FKeywordMining);

  while not FSplash.vCompletado do
      Application.ProcessMessages;

  FSplash.Hide;
  FSplash.Free;

  Application.Run;
end.

De esta manera, nuestro Spash Screen será visible durante 3 segundos y luego seguirá el curso normal de la aplicación.