Autor Beitrag
susi59
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 05.11.10 16:07 
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).
Einloggen, um Attachments anzusehen!
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 05.11.10 17:38 
Bin ich blind, oder ist hier keine Frage? :lupe:

Für mich sieht das eher nach einer Unit-Vorstellung aus. Und die sollte dann wohl auch in die passende Sparte. Wenn dem so ist, würde ich das dann mal verschieben?

Grüße,
Martok

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."