![]() |
ProgressBar auf splashform
Hallo zusammen,
ich habe ein splashform welches ich folgendermassen anzeige:
Delphi-Quellcode:
Ich möchte während der Anzeigedauer eine Progressbar laufen lassen und habe in eine Schleife im FormShow des splashforms
Application.Initialize;
splashForm := TSplashForm.Create(nil); SplashForm.ShowOnTop; Application.ProcessMessages; SplashForm.Update; Application.CreateForm(TArtikelstammdatenForm, ArtikelstammdatenForm); Application.CreateForm(Tartikelbearbeitenform, artikelbearbeitenform); SplashForm.Hide; SplashForm.Free; Application.Run; folgendes untergebracht:
Delphi-Quellcode:
leider tut sich nix :-(
for i:= 1 to 10 do
begin ProgressBar1.StepIt; end; ist die ereignisprocedure FormShow der falsche Ort, oder was mache ich falsch? danke Gruss KH |
Re: ProgressBar auf splashform
Hallo khh,
ich denke "JA" da mit .Show das Form nur (einmalig) angezeigt wird. Du müßtest dann z.B. über einen Timer den SplashForm.ProgressBar ansteuern. ggf. noch ein Application.processmessages dazwischen packen. Ich bin mir nicht sicher, aber ich glaube eine ähnliche Frage wurde Anfang des Jahres gestellt. Gruß K-H |
Re: ProgressBar auf splashform
Zitat:
danke dir, werd ich so mal probieren Gruss KH |
Re: ProgressBar auf splashform
Du solltest die ProgressBar nicht einfach hochzählen lassen - es sei denn, du weißt im Voraus, wie lange das Programm zum Starten braucht ;) - sondern nach jeden Anweisung im Projekt-Quelltext erhöhen.
Also: Ändere die Eigenschaft Max der ProgessBar auf z.B. 4, und füge dann folgende Zeilen immer zwischen einer eigentlichen Befehlszeile ein:
Delphi-Quellcode:
Wenn du es genauer haben willst, musst du eben die beiden Create-Methoden auseinander nehmen, und zum Beispiel in FormCreates auf die ProgressBar zugreifen.
Application.Initialize;
splashForm := TSplashForm.Create(nil); SplashForm.ShowOnTop; Application.ProcessMessages; SplashForm.Update; Application.CreateForm(TArtikelstammdatenForm, ArtikelstammdatenForm); SplashForm.ProgressBar1.StepIt; Applicatoin.ProcessMessages; Application.CreateForm(Tartikelbearbeitenform, artikelbearbeitenform); SplashForm.ProgressBar1.StepIt; Applicatoin.ProcessMessages; SplashForm.Hide; SplashForm.Free; Application.Run; |
Re: ProgressBar auf splashform
Och Kinders ...,
das Thema Splash-Screen wurde schon sooooo oft durchgekaut. Einfach mal die Forensuche benutzen! Oder ![]() |
Re: ProgressBar auf splashform
Application.ProcessMessages ausserhalb der Hauptschleife (also Application.Run) ist Pfui, denn es können seltsame Effekte entstehen.
Es werden ja nicht nur PAINT-Messages verarbeitet, sondern auch Tastendrücke, Mausklicks, usw. Das möchte man während der Hochlaufphase der Anwendung natürlich nicht haben.
Delphi-Quellcode:
Noch besser ist, wenn man zusätzlich eine Info mitgibt, was das Programm gerade tut:
procedure TSplashForm.DoAStep;
begin ProgressBar1.StepIt; ProgressBar1.Repaint; // Zeichen end; ...... { alt SplashForm.ProgressBar1.StepIt; Applicatoin.ProcessMessages; } SplashForm.DoAStep; // neu
Delphi-Quellcode:
procedure TSplashForm.SetMessage(const text:string);
begin InfoLabel.Caption := text; InfoLabel.Repaint; DoAStep; // zusätzlich Progressbar weiterschalten end; .... SplashForm.SetMessage('Lade Artikelstammdaten ...'); Application.CreateForm(TArtikelstammdatenForm, ArtikelstammdatenForm); |
Re: ProgressBar auf splashform
Kleiner zusätzlicher Denkanstoß:
Wie wäre es mit der Methode "Update"? Ich mache das bei den SplashForms immer so:
Delphi-Quellcode:
In der dpr-Datei wird dann lediglich bis 100% hochgezählt, z. B. so:
procedure TForm13.ShowNextStep(iPercent: integer);
begin Progressbar1.Position := iPercent; Update; end;
Delphi-Quellcode:
Application.Initialize;
Application.CreateForm(TForm13, Form13); //-> Splashform Form13.Show; Form13.ShowNextStep(25); Application.CreateForm(TForm2, Form2); ... Form13.ShowNextStep(40); Application.CreateForm(TForm18, Form18); .... Form13.ShowNextStep(90); Form13.Close; Application.Run; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 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 by Thomas Breitkreuz