![]() |
Bekomme meine Variante vom Splashscreen nicht hin
Hi. Habe mich wegen eines SplashScreen an foldenden Post hier im Forum gehalten.
![]() Funktioniert auch soweit ganz gut, nur sieht man meine Anwendung schon, wenn ich den SplashScreen sehe. Ich will es so haben: Ich starte die Anwendung und sehe meinen Splashscreen ca. 3 Sekunden. Wärenddessen wird im Hintergrund meine TFrmApplication vollständig geladen und dann erst angezeigt. Hier mein Code bis jetzt:
Delphi-Quellcode:
begin
frmSplash := TfrmSplash.Create(Application); try frmSplash.InitializationDone := False; frmSplash.Show; frmSplash.Refresh; Application.Initialize; Application.CreateForm(TFrmApplication, FrmApplication); // (1) // weitere Formulare und Datenmodule hier her verschieben (siehe 2) finally frmSplash.InitializationDone := True; end; // (2) // Standardmäßig erstellte Formulare wird Delphi hier eintragen // nach (1) verschieben !!! Application.Run; end. Danke schon mal |
Re: Bekomme meine Variante vom Splashscreen nicht hin
Kann mir denn niemand antworten? Ich hab das ganze WE rumprobiert und immer noch net hinbekommen.
|
Re: Bekomme meine Variante vom Splashscreen nicht hin
Hallo DoctorD!
Hast Du bei FrmApplication mal Visible auf False gesetzt und an der stelle, wo Deine Daten geladen werden dann Visible := True probiert? Gruß winkel79 |
Re: Bekomme meine Variante vom Splashscreen nicht hin
So ähnlich hatte ich mir das auch gedacht. Aber wo muss ich denn dann die Form im Code auf Visible setzen?
|
Re: Bekomme meine Variante vom Splashscreen nicht hin
Hi,
ich würde einfach das Splash Form dazu verwenden, da der ja erst ausgeht, wenn alles geladen ist, oder? also von:
Delphi-Quellcode:
ändern zu
procedure TfrmSplash.SetInitializationDone(const Value: Boolean);
begin FInitializationDone := Value; Close; end;
Delphi-Quellcode:
Natürlich muß in die Uses Clause des Splash Screen nun auch die Unit vom FrmApplication. Das sollte Delphi nach dem Compile Error aber automatisch anbieten (je nach Delphi Version).
procedure TfrmSplash.SetInitializationDone(const Value: Boolean);
begin FInitializationDone := Value; if Assigned(FrmApplication) then FrmApplication.Visible := True; Close; end; Gruß winkel79 |
Re: Bekomme meine Variante vom Splashscreen nicht hin
Habe das grad nochmal ausprobiert.
Also, wenn ich die Form standardmäßig Visible := false setze, und ich das Programm starte ohne im Code irgedwo Visible:=true zu setzte, dann wird die Form trotzdem visible. Warum? |
Re: Bekomme meine Variante vom Splashscreen nicht hin
wenn du es so haben willst musst du dein Mainform auf nicht sichtbar setzen (Application.ShowMainForm) und dann eben per Zeit kontrollieren das dein Splashscreen mindestens 3 Sekunden gezeigt wird. Nach 3 Sekunden blendest du dann das MainForm (Application.MainForm.Show) manuell ein.
|
Re: Bekomme meine Variante vom Splashscreen nicht hin
Habe jetzt beim OnCreate des SplashScreens mein Application.ShowMainForm := false gesetzt und dann nach dem Laden
Delphi-Quellcode:
Aber meine Mainform wird von Anfang an angezeit. Und Visible im OI steht auch noch auf false.
procedure TFrmSplash.SetInitializationDone(const Value: Boolean);
begin FInitializationDone := Value; if Assigned(FrmApplication) then Application.ShowMainForm := true; Close; end; Warum ist das so? |
Re: Bekomme meine Variante vom Splashscreen nicht hin
Setz mal
Delphi-Quellcode:
im OnCreate des FrmApplication, nicht beim Splash-Form.
Application.ShowMainForm := False;
Und im Splash dann:
Delphi-Quellcode:
procedure TFrmSplash.SetInitializationDone(const Value: Boolean);
begin FInitializationDone := Value; Application.MainForm.Show; Close; end; |
Re: Bekomme meine Variante vom Splashscreen nicht hin
Zudem seh ich noch nirgends das du irgendwo 3 Sekunden wartest bzw. die Differenz zwischen 3 Sekunden und der Zeit die zum erstellen des Forms verbraucht wird.
|
Re: Bekomme meine Variante vom Splashscreen nicht hin
Gut. Hab das eben ins OnCreate von der FrmApplication gemacht. Aber es ist immer noch so wie vorher. Ich sehe es gleich am Anfang.
Kann es sein, dass ich mein FrmApplication nicht als MainForm verwende? Wo stelle ich das denn überhaupt ein? @SirThornberry: Das mache ich wie im Tutorial:
Delphi-Quellcode:
procedure TFrmSplash.tmrMinTimingTimer(Sender: TObject);
begin tmrMinTiming.Enabled := False; Close; end; |
Re: Bekomme meine Variante vom Splashscreen nicht hin
Zitat:
Er schreibt ja nicht, daß er es 3 Sekunden zwingen sehen will, sondern nur daß er es ca. 3 Sekunden sieht während sein MainForm lädt... |
Re: Bekomme meine Variante vom Splashscreen nicht hin
Also irgendwie ist das noch ein zeitliches Problem. wenn ich das nun durch debugge, dann ist es so wie ich es haben will.
Nur die Hauptform erscheint beim normalen aufruf zu früh. Diese muss noch warten. Nur wo muss das jetzt rein? |
Re: Bekomme meine Variante vom Splashscreen nicht hin
Pack mal das
Delphi-Quellcode:
vom SetInitializationDone rüber in das OnClose des FrmSplash.
Application.MainForm.Show
Geht es dann? |
Re: Bekomme meine Variante vom Splashscreen nicht hin
Genau das wars!!! Vielen vielen Dank Euch beiden!!!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz