![]() |
Splashscreen: Formcreate der Mainform ausführen
Hey!
Ich habe einen Splashscreen in meine Anwendung eingebaut. Ich möchte nun, dass währenddessen auch direkt THauptform.FormCreate ausgeführt wird und erst nach deren Abschließen der Screen geschlossen wird.
Delphi-Quellcode:
procedure TSplash.SetInitializationDone(const Value: Boolean);
begin FInitializationDone := Value; Close; end; procedure TSplash.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := (not Timer1.Enabled) and FInitializationDone; end; procedure TSplash.Timer1Timer(Sender: TObject); begin Timer1.Enabled := False; Close; end; procedure TSplash.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; Splash := nil; end; |
Re: Splashscreen: Formcreate der Mainform ausführen
Wo zeigst du denn den Splashscreen an, das geht aus deinem Code nicht hervor.
Wenn du den Screen mit Show() aufrufst, wird der restliche Initialisierungscode aus deinem Hauptformular doch weiter geladen. Wenn du Darstellungsprobleme kriegst, z.B: wenn du eine andere Anwendung über den Splashscreen ziehst, so wird dieser nicht neu gezeichnet, kannst du die ganze Splashgeschichte auch in einen eigenen Thread auslagern. |
Re: Splashscreen: Formcreate der Mainform ausführen
Ich habe
![]()
Delphi-Quellcode:
begin
Splash := TSplash.Create(Application); try Splash.Show; Splash.Refresh; Application.Initialize; Application.Title := 'VPlan'; Application.CreateForm(THauptform, Hauptform); Application.CreateForm(TGrundeinstellungen, Grundeinstellungen); Application.CreateForm(TAbout, About); Application.CreateForm(TLizenz, Lizenz); Application.CreateForm(THTMLFarben, HTMLFarben); Application.CreateForm(TSettings_FTP, Settings_FTP); Application.CreateForm(TIndexseite, Indexseite); finally Splash.InitializationDone := True; end; Application.Run; |
Re: Splashscreen: Formcreate der Mainform ausführen
Ja, und was funktioniert nicht an dem Code ? Die ganzen Application.CreateForm werden doch nach Anzeigen des Splashscreens durchgeführt und zum Schluss wird der Splashscreen wieder ausgeblendet.
|
Re: Splashscreen: Formcreate der Mainform ausführen
Startet nicht Application.Run erst die Nachrichtenschleife?
Wenn ja, dann müsste das nach dem Erzeugen des Splash-Screens geschrieben werden, nicht erst am Ende wenn schon alle Formulare fertig geladen sind. Genau so würde ich das Apllication.Initialize vor die Erzeugung des Screens schreiben. Flare |
Re: Splashscreen: Formcreate der Mainform ausführen
Ich denke nicht dass das Abarbeiten von Botschaften und Events für Ladeverzögerungen verantwortlich sind (in der Regel). Du kannst natürlich auch im OnShow Event deines Hauptformulars den SPlashscreen schliessen.
|
Re: Splashscreen: Formcreate der Mainform ausführen
Hi,
ich bevorzuge für SplashScreens folgendes: Der SplaschScreen wird unter den Projektoptionen deaktiviert, sodass man ihn manuell erstellen muss.
Delphi-Quellcode:
Mfg
uses
USplash; procedure TMainForm.FormCreate(Sender: TObject); begin SplashScreen := TSplashScreen.Create(Application); SplashScreen.Show; Application.ProcessMessages; //Initialisation - währenddessen wird der Splash angezeigt! Blablubb := TBlablubb.Create('blubbblubb'); end; procedure TMainForm.FormActivate(Sender; TObject); begin if Assigned(SplashScreen) then begin //Hier wird das Hauptfenster schon angezeigt. Alternativ OnShow verwenden. //Manchmal mache ich hier noch eine Zeitprüfung //damit der SplashScreen auch auf schnellen //Systemen nicht nur kurz aufblitzt, sondern //lesbar ist. //SplashScreen.Hide; //nicht notwendig FreeAndNil(SplashScreen); end; end; FAlter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 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