Soms wil je een splash screen laten zien om de gebruiker visuele feedback te geven dat een programma aan het starten is.
In een van mijn programma's kan het voorkomen dat het laden van de database wat op zich laat wachten en in dat geval wil ik natuurlijk dat de gebruiker ziet dat het programma bezig is.
Omdat het me wat zoekwerk opleverde, leek het me een goed idee om de opposing hier te delen.
Stap 1 - Make een new form, net zoals je dat met elk ander form zou doen. Zet FormStyle van het nieuwe form op fsSplash.
Merk op : Ik noemde de unit "LoadingForm" en de naam van het form is "fmLoadingForm" (wat dan automatisch het TfmLoadingForm type definieert).
Stap 2 - Zorg ervoor dat de juiste unit in de LPR (project) file is toegevoegd:
program MyProgram;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
{$IFDEF HASAMIGA}
athreads,
{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, mainunit, About, LoadingForm
{ you can add units after this };
{$R *.res}
Stap 3 - Create de Splash form voor de andere forms worden aangemaakt. Ook dit gebeurt in de LPR file:
begin
RequireDerivedFormResource:=True;
Application.Scaled:=True;
Application.Initialize;
// Create and show splash screen
fmLoading:=TfmLoading.create(Application);
fmLoading.show;
fmLoading.Update;
Application.ProcessMessages;
Application.CreateForm(TMainForm, MainForm);
// remove this line:
// Application.CreateForm(TfmLoading, fmLoading);
Application.CreateForm(TAboutForm, AboutForm);
// Hide and destroy splash screen
fmLoading.close;
fmLoading.Release; // comment this out if you'd like to use it in the application again
Application.Run;
end.
Â
En dat is alles ... 😊Â
In het kort:
We maken handmatig een instantie van TfmLoading, welke we zichtbaar maken (show) en updaten (update).
We roepen Application.ProcessMessages aan om er zeker van te zijn dat dit meteen wordt uitgevoerd.
Daarna laten we de gewoonlijk forms aanmaken - maar verwijder wel de automatisch geplaatste regel voor het splash form.
Optioneel:
In mijn programma gebruik ik betreffende splash screen potentieel nog een keer (als de gebruiker een andere database opent).
In dat geval moet je de regel fmLoading.Release weghalen zodat het beschikbaar blijft.
Â