Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   ProgressBar auf splashform (https://www.delphipraxis.net/132515-progressbar-auf-splashform.html)

khh 14. Apr 2009 14:04


ProgressBar auf splashform
 
Hallo zusammen,
ich habe ein splashform welches ich folgendermassen anzeige:
Delphi-Quellcode:
  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;
Ich möchte während der Anzeigedauer eine Progressbar laufen lassen und habe in eine Schleife im FormShow des splashforms
folgendes untergebracht:
Delphi-Quellcode:
  for i:= 1 to 10 do
  begin
   ProgressBar1.StepIt;
  end;
leider tut sich nix :-(

ist die ereignisprocedure FormShow der falsche Ort, oder was mache ich falsch?


danke Gruss KH

p80286 14. Apr 2009 14:56

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

khh 14. Apr 2009 16:53

Re: ProgressBar auf splashform
 
Zitat:

Zitat von p80286
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


danke dir, werd ich so mal probieren



Gruss KH

Yogu 14. Apr 2009 20:54

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:
  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;
Wenn du es genauer haben willst, musst du eben die beiden Create-Methoden auseinander nehmen, und zum Beispiel in FormCreates auf die ProgressBar zugreifen.

Hobby-Programmierer 14. Apr 2009 21:08

Re: ProgressBar auf splashform
 
Och Kinders ...,
das Thema Splash-Screen wurde schon sooooo oft durchgekaut. Einfach mal die Forensuche benutzen!
Oder hier schauen.

sx2008 14. Apr 2009 21:15

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:
procedure TSplashForm.DoAStep;
begin
  ProgressBar1.StepIt;
  ProgressBar1.Repaint; // Zeichen
end;


......

{ alt
  SplashForm.ProgressBar1.StepIt;
  Applicatoin.ProcessMessages; }

  SplashForm.DoAStep; // neu
Noch besser ist, wenn man zusätzlich eine Info mitgibt, was das Programm gerade tut:
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);

hincapie 15. Apr 2009 07:39

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:
procedure TForm13.ShowNextStep(iPercent: integer);
begin
  Progressbar1.Position := iPercent;
  Update;
end;
In der dpr-Datei wird dann lediglich bis 100% hochgezählt, z. B. so:

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 09:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz