Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - gleicher Fortschritt in unterschiedlichen Progressbars


Faceman - Mi 24.05.06 12:38
Titel: gleicher Fortschritt in unterschiedlichen Progressbars
Hallo ich bin neu hier und noch Anfänger. Mein Problem ist, dass ich den gleichen Fortschritt in zwei unterschiedliche Progressbars hab(siehe Quelltext). wenn ich im ersten formular 10% habe dann fängt das programm mit 10% im zweiten formular an, obwohl das eigentlich gar nicht sein dürfte, wegen den progressbars und den timer. das zweite formular öffne ich mit form2.show. irgendwie muss man die progressbar2.position auf null bekommen, damit er wieder von vorne anfängt. hab an

Delphi-Quelltext
1:
progressbar2.position:=progressbar2.position -progressbar2.position;                    

gedacht und dann so

Delphi-Quelltext
1:
progressbar2.position:=progressbar2.position +1;                    

aber das geht nich. liegt das daran das form1 gleich die mainform ist und deswegen alle progressbars den gleichen fortschritt haben. ich habe beide timer auf 900(timer.interval:=900) gestellt. ich hab keine ahnung warum das so ist.

Quelltext

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
procedure TForm1.FormCreate(Sender: TObject); 
begin 
timer3.Enabled:=true; 
end; 

procedure TForm1.Timer3Timer(Sender: TObject); 
begin 
progressbar1.Position := progressbar1.Position + 1; 
if progressbar1.position=97 then label16.caption:='3...'; 
if progressbar1.position=98 then label16.caption:='2...'; 
if progressbar1.position=99 then label16.caption:='1...'; 
  if progressbar1.Position = 100 then begin 
    timer3.Enabled := false; 
    close; 
    end; 
end; 

procedure TForm1.Button14Click(Sender: TObject); 
begin 
timer3.Enabled:=false; 
end; 

procedure TForm2.Timer4Timer(Sender: TObject); 
begin 
progressbar2.Position := progressbar2.Position + 1; 
if progressbar2.position=97 then label16.caption:='3...'; 
if progressbar2.position=98 then label16.caption:='2...'; 
if progressbar2.position=99 then label16.caption:='1...'; 
  if progressbar2.Position = 100 then begin 
    timer4.Enabled := false; 
    close; 
    end; 
end; 

procedure TForm2.FormCreate(Sender: TObject); 
begin 
timer4.Enabled:=true; 
end;


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
Moderiert von user profile iconGausi: Topic aus Internet / Netzwerk verschoben am Mi 24.05.2006 um 13:57


Arno Nym - Mi 24.05.06 13:14

Hi !
Also, generell werden alle Formulare gleich nach Initialisierung der Applikation erstellt, und das "Hauptformular" zu erst. Dass heißt dein TForm1.FormCreate, und das TForm2.FormCreate werden unmittelbar nacheinander ausgelöst. Deswegen laufen die Timer fast gleichzeitig los. Gegebenfalls sollte Timer 2 erst beim onShow Ereignis von Formular 2 starten.
Progrssbars kannst du einfach mit .Position := 0; wieder zurücksetzen.

MFG, Arno Nym


Faceman - Mi 24.05.06 14:17

Danke erstmal für die Antwort.
Wie meinst du das mit onshow. Form2.onshow? Aber das hört sich gut an, ich hoffe das funktioniert.


Arno Nym - Mi 24.05.06 14:57

Hi,
das hängt davon ab wie du das geplant hast, wann die Formulare zu sehen sind. Also wenn z.B. immer nur ein Formular angezeigt werden soll, und du von Form1 zu Form2 wechseln willst wenn man einen Button drückt müsste in der Ereignisroutine für den Buttonclick etwa sowas stehen:

Quelltext
1:
2:
3:
self.hide;
Form2.Timer2.enabled := true;
Form2.show;

dann brauchst du es nicht nochmal extra in das onShow ereignis von Form2 legen.

MFG, Arno