Startbildschirm zeitgesteuert anzeigen
5. Nov 2010, 15:03
Hallo,
ich habe bei meinen Programmen mit Einführungsbildschirm oft das problem, das der wieder ganz schnell weg ist.
In diversen Foren konnte ich keinen Lösugsansatz finden. Deshalb hab ich mich selbst drangemacht.
Das kleine Demo-Programm kann das ganze veranschaulichen.
Die Zeit vom ersten Anzeigen des Splash-Screens bis zum wieder Ausblenden habe ich hier auf 5s gesetzt.
Wie mittels Fortschrittsbalken angezeigt wird, das Formulare geladen sind, dafür gibts ja ausreichend Hinweise.
Ich dachte mir, merke Dir Zeit 1 (z1) als TDateTime, lass nach dem Laden aller Formulare eine Schleife laufen, bis z1+5s = z2
vergangen ist und dann wieder weg mit dem Splash.
Funktioniert im Prinzip auch so, nun nicht ganz so einfach. Das Rechnen mit TDateTime geht ao nicht.
Also habe ich es etwas anders gelöst.
1. SysUtils einbinden für TDatetime.
2. Eine Variable zum auslesen: n:TDateTime.
3. Eine PointerVariable vom Double-Typ,
die auf d gesetzt wird: d:^Double. Von der Größe ( Bytelänge) her sind beide gleich. Dann kann ich den nachkommaanteil
von n ( vor dem Komma=> Tagesangabe, nach dem Komma=> Anteil am 24h - Tag) mittels der Funktion z1:=frac(d^) abtrennen.
4. z1 und z2 für die Zeiten des Anzeigens bzw. des Ausblendenkönnens des Splash-Screens.
5. i:integer, die aber mit der Funktion nix zu tun hat und nur gebraucht wird, den Balken im Screen zu aktualisieren.
Damit ist die Funktion auch schon fast erklärt:
Ich erzeuge das Fenster. Dazu dient Splash:TAboutBox. Die AboutBox selber wird ja als TForm im Programm selbst gebraucht. Ich
brauche also eine zeite Instanz. Die folgenden Anweisungen dienen der Ausblendung des OK-Schalters, des Setzens einer 5s-Maximalläge
des Balkens etc. Also Sachen, die der Veranschaulichung dienen.
Dann wird das Fenster mit Show angezeigt und der Zeitpunkt ermittelt (N:=Now),
Der Zeitanteil in der TDateTime-Variablen n merke ich mir in z1:=frac(d^).
Nach dem alle Formulare geladen sind lasse ich erstmal aich Application.ProcessMessages laufen, ehe
ich in die Warteschleife geht.
Das Wesentliche hier ist das immer wiederkejrende Auslesen der aktuellen Zeit (n:=now).
Wenn die resultierende Zeit z2 größer ist als z1 + 5s, dann wir die Schleife verlassen.
In TDatetime entspricht jede Sekunde dem Bruchteil von 24Stunden: also 1/ ( 24(h) + 60 (min) * 60 (s),
was etwa 0,0000115 entspricht.
Nach Verlassen der Schleife dann nur noch ausblenden des Fensters und Speicher freigeben.
Mit Application.run übernimmt das Hauptprogramm die Regie.
Im Anhang ist die Demo mir den Dateien.
Splash_demo ( Projectdatei), USDMain ( Hauptprogramm), USplash ( Start- und InfoBildschirm).
|