Delphi-PRAXiS
Seite 3 von 3     123   

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/)
-   -   Delphi Erbitte Hilfe bei MarqueeProgressBar !! (https://www.delphipraxis.net/95934-erbitte-hilfe-bei-marqueeprogressbar.html)

Störtebeker 16. Jul 2007 16:45

Re: Erbitte Hilfe bei MarqueeProgressBar !!
 
Estmal Thx. für eure tatkräftigen Ideen. Er kommt zwar nicht mit irgendwelchen Fehlern, jedoch ist es sowohl mit der DELAY-Variante als auch mit der TIMER-Variante so, dass der Splash nur noch kurz aufblitzt, und zum eigentlichen Program wechselt, wenn man da noch was "schrauben" könnte, wäre es denke ich fast perfekt.

KrasserChecker 16. Jul 2007 16:52

Re: Erbitte Hilfe bei MarqueeProgressBar !!
 
Du darfst den Splashscreen natürlich NICHT gleich vor dem Application.Run freigeben.
Sondern erst später:

Delphi-Quellcode:
Splash := TSplash.Create(nil);
try
  Splash.Show;

  // andere Formulare erzeugen

  Application.Run;
finally
  Splash.Free;
end;
Noch besser wäre es sogar, wenn auf dem Splashscreen (wenn der Progressbar voll ist) sowas hier gemacht wird:

"Splash.Close;"
"Hauptfenster.Show"

Störtebeker 16. Jul 2007 17:10

Re: Erbitte Hilfe bei MarqueeProgressBar !!
 
Hat schon ein bisschen weiter geholfen. Nun ist das Problem, dass der SplashScreen aufblendet udn gleichzeitig das eigentliche Programm, also es blendet sich praktisch die Form, die erst nach dem SplashScreen kommen soll ebenfalls auf und schiebt sich in den Vordergrund.

Delphi-Quellcode:

program Project4;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3},
  Unit4 in 'Unit4.pas' {Form4},
  SplashScreen in 'SplashScreen.pas' {Form5};

{$R *.res}

begin
  Application.Initialize;
  Form5 := TForm5.Create(Application);

       with TForm5.Create(nil)do
   try
   Form5.Show;
        Form5.Update;

  MarqueeProgressBar1.Max := 100;
    Show;  // Startbildschirm mit ProgressBar anzeigen
    Update; // Anzeige von Form5 auslösen

  Application.Initialize;
  Application.Title := 'Project4';
  Application.CreateForm(TForm4, Form4);
  MarqueeProgressBar1.StepBy(25);
  Application.CreateForm(TForm1, Form1);
  MarqueeProgressBar1.StepBy(25);
  Application.CreateForm(TForm3, Form3);
  MarqueeProgressBar1.StepBy(25);
  Application.CreateForm(TForm2, Form2);
  MarqueeProgressBar1.StepBy(25);
  Application.Run;
  Finally
   Form5.free;
   Form5.close; // Splash Form
   Form4.Show; // Main Form
  end;


end.
und er kommt, wenn ich auf dem Main Formular auf den Button gehe, der das Programm schließen soll mit einer "AccessViolation"

KrasserChecker 16. Jul 2007 17:23

Re: Erbitte Hilfe bei MarqueeProgressBar !!
 
Delphi-Quellcode:
Form5.free;
Form5.close; // Splash Form
Wird wohl kaum funktionieren. Du kannst ein Formular ja schlecht noch schliessen, wenn Du den Speicher schon freigegeben hast. ;)

Außerdem dachte ich auch eher an sowas hier auf dem Splash-Screen:

Delphi-Quellcode:
if ProgressBar.Percent = 100 then
begin
  Close;
  Application.Run;
end;

Störtebeker 16. Jul 2007 17:56

Re: Erbitte Hilfe bei MarqueeProgressBar !!
 
Das mit dem Speicher und dem Schließen leuchtet mir ein aber bei dem anderen muss ich leider sagen:

(Sry, aber :wiejetzt:)

Hafish 16. Jul 2007 19:30

Re: Erbitte Hilfe bei MarqueeProgressBar !!
 
Ich versteh das nicht ganz, du scheinst ja gar keine MarqueeProgressBar zu verwenden, sondern eine normale :gruebel:

Wenn du eine MarqueeProgressBar verwendest brauchst du doch gar nicht von Position 0-100 zu kommen. Außerdem ist es wenig bis gar nicht zweckdienlich auf einem Splash Screen eine normale Progressbar anzuzeigen, denn wie schon gesagt weiß man ja nicht wann das Programm denn wirklich fertig ist. Wenn man bei einer Progressbar nicht abschätzen kann wie lange es noch dauert kann man sie sich sparen!

Warum benutzt du die MarqueeProgressBar nicht einfach so wie sie vorgesehen ist? Einfach auf ein Formular, Timer dazu, der alle 50 ms die Bar eins erhöht und fertig.
Und wenn du jetzt nicht irgendwelche Thread-Geschichten anfangen willst dann benutze doch einfach die Windows Threads: Pack den Splash Screen in ne eigene Exe, dann startest du die bei Programmstart (evtl mit Parameter) und vor dem Aufruf des Hauptformulars schließt du die Splash-Screen Exe wieder. Fertig. So hast du keine Probleme mit Refresh/Processmessage etc., da die exe alles selbst verwaltet.

Ach so: Benutzt nie nie nie Sleep bei nem Splash Screen. Splash Screens sollen dem Benutzer bei längeren Programm-Starts zeigen dass noch was passiert und nicht dafür sorgen, dass der Programm Start länger dauert^^

Störtebeker 16. Jul 2007 19:53

Re: Erbitte Hilfe bei MarqueeProgressBar !!
 
Thx. für eure Hilfe, aber ich habe mich jetzt erstmal zumindest für den SplashScreen für die Variante entschieden, die man auch bei ADOBE Produkten im SplashScreen findet.

- Keine Progressbar sondern da wird dann praktisch in Worten angezeigt, was gerade geladen wird.
- Das Label (was sich auf dem SplashScreen) wechselt dann halt immer mit jeder Form.

z.b: Form1: Initialize...
Form2: Reading fonts...

- Komme ich ein bisschen besser mit zurecht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 Uhr.
Seite 3 von 3     123   

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