Pagina1 van 1
Forum

Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!

Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.

Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.




Deel:
Meldingen
Alles wissen

[Opgelost] Lazarus Pascal - Hoe maak je een splash screen voor als het programma start

2 Berichten
1 Gebruikers
0 Vind-ik-leuks
617 Bekeken
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2663
Topic starter  

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.

 


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2663
Topic starter  

Tip: soms werkt een enkele Application.ProcessMessages toch net even niet.

Ik heb daarom in mijn code een Application.ProcessMessages call extra toegevoegd:

  // Create and show splash screen
  fmLoading:=TfmLoading.create(Application);
  fmLoading.show;              
  Application.ProcessMessages;
  fmLoading.Update;
  Application.ProcessMessages;

 


   
BeantwoordenCiteren

Bevalt je wat je hier ziet, en wil je graag helpen? 

Uiteraard is de beste manier van helpen, door anderen hier te helpen met hun vragen. Maar je kunt ons ook op andere manieren helpen:

- Shop bijvoorbeeld bij Amazon, het kost je niks extra, maar het kan zijn dat wij een kleine commissie ontvangen,
- stuur me een koffie via PayPal ($5, $10, $20, or zelf kiezen),
- je kunt ook een Patreon worden,
- of BitCoin (BTC), of BitCoinCash (BCH) doneren.

Deel: