![]() |
Timer langsamer als Timer ?
Hallo, ich bins mal wieder
Folgendes Problem: Ich habe einen Timer, der zählt die Zeit, bis das nächste Bild angezeigt wird. Ein zeiter Timer rechnet mit dieser Zeit und steuert die ProgressBar. Timer 1 für die Bilder:
Delphi-Quellcode:
Timer 2 für die ProgressBar:
procedure TForm1.tZeitTimer(Sender: TObject);
var AuswahlBild : string; AuswahlNummer : integer; begin repeat AuswahlNummer := Random(clbBilder.Count); until clbBilder.Checked[AuswahlNummer] = true; AuswahlBild := sgDaten.Cells[2,AuswahlNummer]; ChangeWallpaper(AuswahlBild); end;
Delphi-Quellcode:
Aufgerufen werden beite gleichzeitig hier:
procedure TForm1.tProgressBarTimer(Sender: TObject);
begin if pgbZeit.Position = pgbZeit.Max then begin p := 0; pgbZeit.Position := p; end else begin p := p + 100; pgbZeit.Position := p; end; end;
Delphi-Quellcode:
Frage: Warum geschieht der Bildwechsel immer viel früher als das die ProgressBar am Ende ankommt?
procedure TForm1.btnStartClick(Sender: TObject);
begin if cbZeit.Checked = true then begin if edtZeit.Text <> '' then begin lbStatus.Caption := 'Aktiv'; lbStatus.Font.Color := clLime; tZeit.Interval := (strtoint(edtZeit.Text)*1000); pgbZeit.Max := (strtoint(edtZeit.Text)*1000); p := 0; tProgressBar.Enabled := true; tZeit.Enabled := true end else ShowMessage ('Sie haben keine Zeit eingegeben.'); end; end; |
Re: Timer langsamer als Timer ?
Timer sind nicht genau. Anstatt im Interval immer eine Konstante zu addieren, solltest Du lieber die zeitliche Differenz zu einem Startwert verwenden.
|
Re: Timer langsamer als Timer ?
und das geht mit der funktion
Delphi-Quellcode:
("Retrieves the number of milliseconds that have elapsed since the system was started.")
GetTickCount
|
Re: Timer langsamer als Timer ?
mmh also ich glaube (nicht wissend) das ich verstanden habe was ihr mit "zeitliche Differenz zum Startwert" meint.
Allerdings hab ich keine Ahung wie genau man das jetzt umsetzt. Also ich soll mit GetTickCount immer mein P vergrößern? |
Re: Timer langsamer als Timer ?
du holst du zu Beginn den Startwert mit GetTickCount (Variable1). Wenn du später im Timer wieder die Zeit mit GetTickCount aufrufst (Variable2) kannst du die vergangene Zeit in Millisekunden mit Variable2 - Variable1 berechnen.
|
Re: Timer langsamer als Timer ?
war ich wohl zu langsam. ich lass dne beitrag mal trotzdem drin wegen dem codeschnipsel :P
du weist am "anfang" einer variablen den rückgabewert von GetTickCount zu. danach kannst du, indem du den aktullen GetTickCOuntWert abziehst die vergangende Zeit in millisekunden erhalten:
Delphi-Quellcode:
var
a: DWord; begin a:=GetTickCount; [...CODE...] Showmessage('Es sind ' + IntToStr(GetTickCount - a) + ' ms vergangen...) end; |
Re: Timer langsamer als Timer ?
Warum denn nicht so?
Delphi-Quellcode:
Dann hast du nur einen Timer und die Wechsel sind absolut synchron mit der ProgressBar.
procedure TForm1.tGlobalTimerTimer(Sender: TObject);
var AuswahlBild : string; AuswahlNummer : integer; begin if pgbZeit.Position = pgbZeit.Max then begin // Bild austauschen repeat AuswahlNummer := Random( clbBilder.Count ); until clbBilder.Checked[ AuswahlNummer ] = true; // <--- das = true kannst du dir hier sparen AuswahlBild := sgDaten.Cells[ 2, AuswahlNummer ]; ChangeWallpaper( AuswahlBild ); // ProgressBar zurücksetzen p := 0; pgbZeit.Position := p; end else begin p := p + 100; pgbZeit.Position := p; end; end; Da kann es Dir auch egal sein, wie falsch der Timer geht :mrgreen: cu Oliver |
Re: Timer langsamer als Timer ?
wow cool stimmt :cyclops: warum komm ich auf sowas nicht :wall:
ja mit dem timer ist es egal den keinem fällt auf ob das Bild jetzt 1 Sekunde früher oder später wechselt bei einer durchschnittlichen Dauer von 5 Minuten :zwinker: Danke auch fürs verbessern von den Schöhnheitsfehlern =) MFG MaToBe |
Re: Timer langsamer als Timer ?
you're welcome
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 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