![]() |
ProgressBar mit Timer synchron
Hi,
ich möchte eine ProgressBar mit einem Timer synchron laufen lassen...also z.b. alle 30 sek wird bei mir etwas ausgeführt und die PB soll eben anzeigen, wie "weit" der fortschritt ist. Wie kann ich das machen ? |
Re: ProgressBar mit Timer synchron
Delphi-Quellcode:
in Timer1.OnTimer schreiben
ProgressBar1.StepIt;
|
Re: ProgressBar mit Timer synchron
Und einen Redraw des Selbigen veranlassen.
|
Re: ProgressBar mit Timer synchron
also mein Timer steht auf 30000 also 30 sek...wenn ich dann
Delphi-Quellcode:
in ONtimer reinschreibe, passiert garnix...
ProgressBar1.StepIt;
|
Re: ProgressBar mit Timer synchron
Was hast du als Maximum gesetzt?
|
Re: ProgressBar mit Timer synchron
edit:// ach quatsch, das Interval des Timers also in diesem Fall 30000...
|
Re: ProgressBar mit Timer synchron
und ist der Timer auch eingeschaltet?
|
Re: ProgressBar mit Timer synchron
das ist der Code...hoffe mal, dass ich nix vergessen habe...
Delphi-Quellcode:
//...
procedure TForm1.Button1Click(Sender: TObject); begin akt_int := strtoint(edit1.text); timer1.Enabled := true; timer1.interval := (akt_int*1000); Button1.Caption:= 'gestartet...mit'+edit1.text+' Sek.'; Application.ProcessMessages; ProgressBar1.Enabled := true; progressbar1.Min := 0; progressbar1.Max := Timer1.Interval; end; procedure TForm1.Ontimer(Sender: TObject); begin ProgressBar1.StepIt; end; //.... |
Re: ProgressBar mit Timer synchron
Delphi-Quellcode:
Dann ist es ja Klar, du müßtest das Programm ewig Laufen lassen bevor du was siehst. (Alle 30 Sek ein Punkt ~ 1/1000)!.
progressbar1.Max := Timer1.Interval;
Es fehlt auch der redraw der Progressbar:
Delphi-Quellcode:
procedure TForm1.Ontimer(Sender: TObject);
begin ProgressBar1.StepIt; ProgressBar1.Update; end; |
Re: ProgressBar mit Timer synchron
Delphi-Quellcode:
so funktioniert es aber auch net...der macht alle 30 sek knapp 1/3 oder so :-\
//...
procedure TForm1.Button1Click(Sender: TObject); begin akt_int := strtoint(edit1.text); timer1.Enabled := true; timer1.interval := (akt_int*1000); Button1.Caption:= 'gestartet...mit'+edit1.text+' Sek.'; Application.ProcessMessages; ProgressBar1.Enabled := true; progressbar1.Min := 0; progressbar1.Max := 30; end; procedure TForm1.Ontimer(Sender: TObject); begin ProgressBar1.StepIt; ProgressBar1.Update; end; Wie kann ich das denn abhänig von der Timer1.Interval-Zeit ? also, dass das immer passt, egal was man in Edit1.text eingibt ? |
Re: ProgressBar mit Timer synchron
Wie lang soll es den brauchen, bis der Balken voll ist?
|
Re: ProgressBar mit Timer synchron
ja genau, wenn der balken voll ist, soll der Timer abgelaufen sein.
|
Re: ProgressBar mit Timer synchron
Das kannst du erreichen, wenn du das maximum auf 1 setzt. Dann macht aber ei Fortschrittsbalken wenig Sinn ;-). Oder du Verringerst das Intervall auf eine Zehntel und setzt Max auf 10;
|
Re: ProgressBar mit Timer synchron
Eigentlich müsste er einen zweiten Timer einbauen, der in einem kleineren Intervall die Fortschrittanzeige antreibt, wobei der dann mit dem 1. Timer nicht wirklich synchron wäre (irgendwo schon). Liegt daran, dass man die aktuelle Position von einem Timer nicht abfragen kann.
Flare |
Re: ProgressBar mit Timer synchron
Wie wärs mit eine Variable, die du im OnTimer auf % 10 prüfst - dann wird dein eigentliches OnTimer nur alle 10 Intervalle aufgerufen, du kannst aber bei jedem den Fortschrittsbalken aktualisieren ?
Delphi-Quellcode:
var i: Integer;
procedure TForm1.Ontimer(Sender: TObject); begin if i mod 10 = 0 then begin // was machen end; ProgressBar1.StepIt; ProgressBar1.Update; end; |
Re: ProgressBar mit Timer synchron
Ich versteh das net, wie ich das jetzt realisieren soll...
könnte mir vielleicht jemand ein passendes Beispiel geben, bei dem die beiden eben synchron laufen und die Prpogressbar "voll" ist, wenn der Timer abgelaufen ist. vielen dank schonmal im voraus |
Re: ProgressBar mit Timer synchron
Soll der Timer später noch weitere Funktionen bekommen oder geht es wirklich nur um eine Verzögerung? Wenn er nur nur zur Verzögerung dient, würde ich es mit einem Timer machen sonst würde ich es wie jfheins vorgeschlagen hat machen.
|
Re: ProgressBar mit Timer synchron
der timer hat nur die funktion, zu zählen, bis die 30sek voll sind und die progressbar "anzutreiben". Wenn der Timer abgelaufen ist, wird aber noch eine andere funktion ausgeführt.
|
Re: ProgressBar mit Timer synchron
Dann würde ich es so machen:
Delphi-Quellcode:
Nun ist der Intervall des Timers 1/10 von der Wartezeit, d.h der Timer wird 10mal ausgelöst und da Max 10 ist, ist der Fortschrittsbalken am Ende angekommen.
timer1.interval := (akt_int*100);
Button1.Caption:= 'gestartet...mit'+edit1.text+' Sek.'; Application.ProcessMessages; ProgressBar1.Enabled := true; progressbar1.Min := 0; progressbar1.Max := 10; |
Re: ProgressBar mit Timer synchron
also das funktioniert nicht....
wo soll denn das "stepit" hin ? eben wurde gesagt in "ontimer" aber ist das nicht viel zu spät ? denn der wird ja erst ausgelöst, wenn die 30sek abgelaufen sind. |
Re: ProgressBar mit Timer synchron
Deshalb hab ich ja den das Timer-Intervall auf 3 Sekunden gestellt.
|
Re: ProgressBar mit Timer synchron
Also ich habe es damit gelöst, dass der Timer immer nur einen teil der eigentlichen Zeit brauch um das Ereignis auszulösen.
Bsp:
Code:
d.h. ich habe geschrieben, das das Intervall:
[*]Gesamtdauer : 10 Sekunden[*]Schritte (Fortschrittbalken) : 100
Delphi-Quellcode:
d.h.
Timer.Intervall := (Gesamtdauer * 1000) / Schritte
Delphi-Quellcode:
procedure TForm1.TimerTimer(Sender : TObject)
begin ProgessBar.Position := ProgressBar.Position + 1 //Ich kenne noch nicht Stepit, aber ist das das gleiche? if ProgessBar.Position = ProgressBar.Max {allternativ statt "ProgessBar.Max" auch "100" o.ä.} then begin Timer.Enabled := false; Showmessage('Essen ist fertig ^^'); // ggf: //ProgessBar.Position := 0; end; end; |
DP-Maintenance
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Timer ist VCL, also *schieb* ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:18 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