Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   uhr mit TTimer (https://www.delphipraxis.net/162743-uhr-mit-ttimer.html)

hamster1989 3. Sep 2011 22:17

uhr mit TTimer
 
hallo, ich hoffe die Kategorie passt bin mir aber nicht sicher da die meisten Themen und Begriffe mir nicht viel sagen da ich Programmieranfänger bin. Jedenfalls hab ich bei meiner Uhr das Problem, dass jedesmal wenn die sekunde einen vorspringt die Minute dasselbe tut.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);

begin
 if sec < 60 then
   sec:= sec+1
 else
   sec:= 1;
   min:= min+1;
   label1.Caption:= inttostr(std) + ':'+ inttostr(min) +':'+ inttostr(sec);
end;

ansonsten suche ich noch die Postingregeln vom Forum die habe ich leider auch nicht gefunden.

ich bin für jeden tipp dankbar :D

Jacques Murell 3. Sep 2011 22:21

AW: uhr mit TTimer
 
Delphi-Quellcode:
   min:= min+1;
   label1.Caption:= inttostr(std) + ':'+ inttostr(min) +':'+ inttostr(sec);
Der Code wird immer ausgeführt, da hinter der Alternativbedingung else kein begin ... end; folgt. D.h. nach dem else wird nur sec := 1 ausgeführt, danach ist die ganze if-Bedingungen abgearbeitet und der Code danach wird immer ausgeführt. ALso:

Delphi-Quellcode:
begin
 if sec < 60 then
   sec:= sec+1
 else
   begin
     sec:= 1;
     min:= min+1;
     label1.Caption:= inttostr(std) + ':'+ inttostr(min) +':'+ inttostr(sec);
   end;
end;

Sir Rufo 3. Sep 2011 22:22

AW: uhr mit TTimer
 
Quelltext ordentlich und sachlich richtig formatieren zeigt den Fehler:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin

  if sec < 60
  then
    sec := sec+1
  else
    sec := 1;

  min := min + 1;
  Labellabel1.Caption:= inttostr( std ) + ':' + inttostr( min ) + ':' + inttostr( sec );

end;

himitsu 3. Sep 2011 22:56

AW: uhr mit TTimer
 
PS: Deine Sekunden laufen von 1 bis 60 und nicht von 0 bis 59 :wink:

Sir Rufo 3. Sep 2011 22:57

AW: uhr mit TTimer
 
Zitat:

Zitat von himitsu (Beitrag 1121556)
PS: Deine Sekunden laufen von 1 bis 60 und nicht von 0 bis 59 :wink:

Nö, weder noch die laufen von 1 bis 59 ;)

Auch sollte man über einen Timer (auch wenn der auf 1000ms steht) nicht die Zeit messen, denn Windows ist kein Echtzeit-BS. Das Intervall gibt an, das so etwa nach 1000ms, wenn denn Zeit dafür da ist, dieses Event gefeuert wird.

Also beim Start die aktuelle Uhrzeit merken (now) und dann im Timer-Event diesen Wert immer von der aktuellen Uhrzeit subtrahieren.
Mit FormatDateTime kann dann auch sehr schön die Ausgabe erfolgen :)

himitsu 3. Sep 2011 23:05

AW: uhr mit TTimer
 
Zitat:

Delphi-Quellcode:
 if sec < 60
  then
    sec := sec+1

<60 = maximal 59
59 + 1 = 60
:zwinker:

Delphi-Quellcode:
  if sec < 59 then
    sec := sec+1
  else begin
    sec := 1;
    min := min + 1;
  end;
sieht blöd aus, aber andersrum klappt es mit der 60 wieder

Delphi-Quellcode:
  if sec >= 60 then begin
    sec := 0;
    Inc(min);
  end else
    Inc(sec);


Und selbst mit einer mieserablen Codeformatierung hätte der Debugger einem sofort den Grund aufgezeigt ... man müßte ihn nur mal verwenden.

Leherer gehören gesteinigt, da sie sowas fast nie erwähnen. (Bevor man wen an code ran läßt, gehören die Grundkenntnisse, Codeaufbau/-formatierung und Debuggen auf den Lehrplan.)

Sir Rufo 3. Sep 2011 23:08

AW: uhr mit TTimer
 
Zitat:

Zitat von himitsu (Beitrag 1121559)
Delphi-Quellcode:
 if sec < 60
  then
    sec := sec+1
<60 = maximal 59
59 + 1 = 60
:zwinker:

Du bist aber auch wieder kleinlich :mrgreen:

himitsu 3. Sep 2011 23:26

AW: uhr mit TTimer
 
So läuft seine Uhr wenigstens im Minutentakt richtig (wenn das Begin-End dann mal stimmt) ... bei 1 bis 59 würde ja garnichts mehr stimmen :angle2:

N1ls 4. Sep 2011 01:18

AW: uhr mit TTimer
 
Hm... Also, wenn ich die Aufgabenstellung jetzt nicht ganz falsch verstanden habe:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  label1.Caption := TimeToStr(Now());
end;
Das ist fuer mich 'ne Uhr, die ich mit TTimer umgesetzt habe.
Wozu irgendwas rechnen? :confused:

Gruesse,

N1ls

hamster1989 4. Sep 2011 01:52

AW: uhr mit TTimer
 
thx


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:08 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