AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Timer

Ein Thema von P.A.P. · begonnen am 15. Apr 2017 · letzter Beitrag vom 15. Apr 2017
Antwort Antwort
Seite 1 von 2  1 2   
P.A.P.

Registriert seit: 15. Apr 2017
5 Beiträge
 
#1

Timer

  Alt 15. Apr 2017, 10:14
Hallo,
ich stell mich gerade richtig dumm an, ich glaube es ist ganz einfach aber ich arbeite das erste mal mit einem Timer.
Und zwar möchte ich einfach nur auf einem Panel eine zeit hochlaufen lassen und zwar mit sekunden und millisekunden. Wenn diese zeit einen wert überschreitet der sich in einem edit befindet, soll die uhr stoppen... Wie stell ich das am einfachsten an???
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#2

AW: Timer

  Alt 15. Apr 2017, 10:15
Hast du denn schon irgendwelche Tests die du vorweisen kannst?
  Mit Zitat antworten Zitat
P.A.P.

Registriert seit: 15. Apr 2017
5 Beiträge
 
#3

AW: Timer

  Alt 15. Apr 2017, 10:18
Im Moment hab ich einen Button der den Timer startet. In dem Timer steht dann folgendes:
procedure TForm1.Timer1Timer(Sender: TObject);
var
zähler: Real;

begin
zähler:=zähler+0.1;
PZeit.caption:=FloatToStr(zähler);
end;

Dann setzt es den Timer aber immer wieder auf 0 zurück und zeigt immer 0.1 an...
und wie man denn stoppt weiß ich noch nicht so ganz
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#4

AW: Timer

  Alt 15. Apr 2017, 10:22
Wär das was?

Delphi-Quellcode:

// oben bei private deklarieren:
iMilliSeconds: Integer;
// .....

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Inc(iMilliSeconds, Timer3.Interval);
 Panel1.Caption := IntToStr(iMilliSeconds);

 if iMilliSeconds = 5000 then
  Timer1.Enabled := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 iMilliSeconds := 0;
 Timer1.Enabled := True;
end;

Der setzt dir "zähler" immer wieder auf 0 zurück, weil "zähler" im Timer selber deklariert ist. Bei jedem Timerdurchlauf gehts dann wieder an den Anfang, also 0.
Die Variable "zähler" (oder wie bei mir iMilliSeconds) muss außerhalb des Timers deklariert werden und darf nur EIN MAL initialisiert (zurückgesetzt) werden. Am besten im Button der auch den Timer startet.

P.S.: wirkliche Millisekunden sind das aber auch nicht. Pro 1000ms die im Panel angezeigt werden kommt es mir so vor, als ob das tatsächlich etwa 1,5 Sekunden wären.

Geändert von a.def (15. Apr 2017 um 10:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.068 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Timer

  Alt 15. Apr 2017, 10:27
Im Moment hab ich einen Button der den Timer startet. In dem Timer steht dann folgendes:
procedure TForm1.Timer1Timer(Sender: TObject);
var
zähler: Real;

begin
zähler:=zähler+0.1;
PZeit.caption:=FloatToStr(zähler);
end;

Dann setzt es den Timer aber immer wieder auf 0 zurück und zeigt immer 0.1 an...
und wie man denn stoppt weiß ich noch nicht so ganz
Zähler ist eine lokale Variable - Die verliert immer ihren Wert, wenn die Procedure beendet wird... Verschieben Var Zähler:real mal in den private Teil des Forms.

Mavarik
  Mit Zitat antworten Zitat
P.A.P.

Registriert seit: 15. Apr 2017
5 Beiträge
 
#6

AW: Timer

  Alt 15. Apr 2017, 10:42
Ok also zählen tut es schonmal um das ganze zu stoppen dachte ich mir jetzt folgendes:

procedure TForm1.Timer1Timer(Sender: TObject);
var zeit:real;
begin
zeit:=StrToFloat(Edit2.Text);
zähler:=zähler+0.1;
PZeit.caption:=FloatToStr(zähler);
if zähler=zeit then
begin
Timer1.Enabled:=false;
end;
end;

auch wenn Zähler=zeit ist, führt es die zeile nicht aus...
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
492 Beiträge
 
#7

AW: Timer

  Alt 15. Apr 2017, 10:48
P.S.: wirkliche Millisekunden sind das aber auch nicht. Pro 1000ms die im Panel angezeigt werden kommt es mir so vor, als ob das tatsächlich etwa 1,5 Sekunden wären.
Ein Timer ist viel zu ungenau. Besser du speicherst dir in der Variablen GetTickCount ab und rechnest immer GetTickCount - DieVariable.
  Mit Zitat antworten Zitat
P.A.P.

Registriert seit: 15. Apr 2017
5 Beiträge
 
#8

AW: Timer

  Alt 15. Apr 2017, 10:52
Danke für den Tipp, aber wie löse ich jetzt das Problem mit dem stoppen des Timers?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.068 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Timer

  Alt 15. Apr 2017, 11:00
auch wenn Zähler=zeit ist, führt es die zeile nicht aus...
if RealA = RealB funktioniert fast nie, da ggf. hintern Komma eine Ungenauigkeit entsteht...

Entweder nimm integer... bei der Ausgabe kannst du ja wieder durch 1000 teilen oder schreibe den if mit ">=".

Ein Timer ist viel zu ungenau.
Er zählt doch selber... Da ist die Genauigkeit des Timers doch egal!
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
492 Beiträge
 
#10

AW: Timer

  Alt 15. Apr 2017, 11:01
Danke für den Tipp, aber wie löse ich jetzt das Problem mit dem stoppen des Timers?
Entweder du rechnest komplett in Millisekunden (Typ Cardinal, wie es GetTickCount zurückgibt) oder du prüfst einfach mit SameValue(...). Denn bei real und Co darf man nie auf gleich prüfen, da diese Zahlen zu ungenau sind und fast nie z.B. exakt 2.0 ergeben sondern z.B: 2,000....0001.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf