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

José Mejuto joshyfun en gmail.com
Jue Dic 30 14:32:34 CET 2010


Hello Walter,

Thursday, December 30, 2010, 1:34:30 PM, you wrote:

W> ¿Que podrá ser...?, o al menos, ¿que tendria que tener en cuenta para que se
W> acelere el arranque...?

Pueden ser varias cosas, por ejemplo si comprimes el exe con UPX esto
provoca que todo el exe se cargue en memoria y se ejecute todo junto
inutilizando la carga selectiva de partes que hace windows.

Otra causa puede ser un antivirus.

Si no es una de estas lo más probable es que sucedan cosas en tu
ejecutable de las que no eres consciente de que te están retrasando el
lanzamiento. Una vez que lanzas un ejecutable de fpc/Lazarus suceden
ciertas cosas por orden:

1) Se carga el exe
2) Se ejecutan todos los "initialization" de todas las units usadas en
el programa. Lo que no estoy seguro es si se lanzan las que aparecen
en el .lpr o todas.
3) Se ejecuta el begin...end del .lpr

Lo más probable es que tengas muchos forms y estés usando el formato
de recursos lazarus "*.lfr". Si es así en el initialization se cargan
e interpretan esos recursos lo cual consume cierto tiempo
especialmente si los forms tienen muchas imágenes.

Haz una copia de seguridad de todo y después en el .lpr elimina del
uses todo lo que no necesites en el .lpr, esto es, normalmente sólo
dejarías algo como:

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms,
  ufrmprincipal, ufrmsplash
  { you can add units after this };

Resumiendo, dejar sólo lo básico y los forms que uses en el .lpr nada
más.

Ah! y en el .lpr pon algo como esto:

var
  j: integer;

begin
  Application.CreateForm(TfrmSplash,frmSplash);
  frmSplash.show;
  for j := 1 to 10 do
  begin
    Application.ProcessMessages;
  end;
  Application.CreateForm(TfrmPrincipal,frmPrincipal);
  Application.Run;
end;

Si así no cambia el tiempo de arranque (hasta que sale el splash
screen) entonces sólo queda hacer una prueba, cambiar el .lpr por:

begin
  Application.CreateForm(TfrmSplash,frmSplash);
  Application.Run;
end;

Y comparar los tiempos, si son similares el "problema" está en los
initialization casi seguro. Si son bastante/muy diferentes entonces
hay que cambiar el sistema de splash.

Si no he entendido la pregunta pulsa ESC :)

-- 
Best regards,
 José





More information about the Lazarus-es mailing list