![]() |
AW: Weiterlernen
Wollte einen einfachen Countdown programmieren,den Code kann man kompilieren,es kommt keine Fehler meldung.
Will wirklich keine zeit von euch verschwenden. :?
Delphi-Quellcode:
var
Form1: TForm1; TotalTime:TTime; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin totaltime:=1000; timer1.Interval:=1000; label1.Caption:=Timetostr(totaltime-1); end; end. |
AW: Weiterlernen
Zitat:
|
AW: Weiterlernen
Zitat:
Zitat:
timer1.Interval:=1000;Wie oft sich die procedure wiederholt (Glaub das wird das einzige richtig sein :lol: ) aber immer nur label1.Caption:=Timetostr(totaltime-1); Hier sollte sich der CountDown anzeigen,da der wert in der labele sich wohl nicht verändert und auf 999 bleiben sollte.Zeigt aber immer nur 00:00:00 an,sollte es wohl anders machen?Zbs. x:=totaltime-1; |
AW: Weiterlernen
TDateTime, TTime und TDate sind allesamt intern Double-Werte, bei denen der ganzzahlige Anteil zur Verschlüsselung des Datums und der Nachkomma-Anteil zur Verschlüsselung der Zeit verwendet wird. Deswegen erhältst du immer die Zeit 00:00:00 - 1000 und 999 sind eben ganze Zahlen. Zur Arbeit mit Zeit-/Datums-Werten solltest du die Unit DateUtils verwenden:
Delphi-Quellcode:
Ich gehe einfach mal davon aus, dass du hier mit 1000 Sekunden arbeiten willst - sonst eben Millisekunden, Minuten oder Stunden verwenden.
//totaltime initialisieren
totaltime := IncSecond(0, 1000); //1 Sekunde abziehen totaltime := IncSecond(totaltime, -1); Die Initialisierung von totaltime sollte natürlich außerhalb des OnTimer-Events geschehen. Die Eigenschaft Interval eines TTimer gibt an, alle wieviel Millisekunden das OnTimer-Event ausgelöst wird, bei 1000 also jede Sekunde. |
AW: Weiterlernen
Stell dir vor, DU bist der Computer. Also tu einfach das, was der Computer auch tun würde.
Es wird der Timer ausgelöst und Timer1Timer aufgerufen. Du stellt TotalTime auf 1000. Du setzt das Timerintervall auf 1000. Du zeigst TotalTime-1 an, also 999. Fertig. Nach einer Sekunde wird der Timer ausgelöst und Timer1Timer aufgerufen. Du stellt TotalTime auf 1000. Du setzt das Timerintervall auf 1000. Du zeigst TotalTime-1 an, also 999. Fertig. Nach einer Sekunde wird der Timer ausgelöst und Timer1Timer aufgerufen. Du stellt TotalTime auf 1000.... Kapiert ? :-D |
AW: Weiterlernen
Zitat:
Delphi-Quellcode:
Fühl mich jetzt etwas doof...
var
Form1: TForm1; TotalTime:TTime; incsecond:TDateTime; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin totaltime := IncSecond (0, 1000); //Fehler meldung "missing operator or semicolon" timer1.Interval:=1000; label1.Caption:=Timetostr(totaltime); end; end. |
AW: Weiterlernen
Wenn ich das richtig sehe, möchtest Du jede Sekunde die Totalzeit um eine Sekunde erhöhen verringern.
Wie wäre es denn dann einfach mit
Delphi-Quellcode:
In einem Datetimewert steht 1 für einen Tag. Ein Tag hat 24 * 60 * 60 = 86400 Sekunden. Eine Sekunde ist also 1 / 86400 und diesen Wert musst Du dann pro Sekunde zu von Deinem Zeitzähler addieren subtrahieren.
totaltime := totaltime - (1 / 86400);
Delphi-Quellcode:
sollte die gleiche Wirkung haben.
totaltime := IncSecond(toteltime,-1);
Das Timerintervall muss nicht bei jedem Aufruf der des Timerereignisses neu gesetzt werden. Das
Delphi-Quellcode:
kann entfallen.
timer1.Interval := 1000;
|
AW: Weiterlernen
IncSecond ist eine Funktion aus der Unit DateUtils, mir ist nicht ganz klar, wieso du das als Variable deklarierst.
Dadurch dass du es als Variable deklarierst, wird an der Stelle natürlich versucht, auch darauf zurückzugreifen, was nicht wirklich funktionieren kann. Das Initialisieren von totaltime sollte noch immer nicht in der onTimer-Methode geschehen, sondern z.b. im OnCreate des Formulars. |
AW: Weiterlernen
Es liegen grundsätzlich mehrere Fehler vor.
Zum einen solltest Du Dir den Post #25 zu Herzen nehmen und versuchen, den Ablauf wie dort beschrieben, nachzuvollziehen. Du wirst feststellen, dass die folgenden Zeilen im Timer-Event nichts zu suchen haben - wieso, wirst Du sicher noch herausfinden.
Delphi-Quellcode:
Der "zweite" Fehler liegt darin, dass Du eine Variable Namens IncSecond definierst.
...
timer1.Interval:=1000; ... Eigentlich möchtest Du ja die gleichnamige Funktion aufrufen - also die Zeile ersatzlos streichen.
Delphi-Quellcode:
var
incsecond:TDateTime; |
AW: Weiterlernen
Zitat:
Sollte ich sagen das ich Delphi 7 benutzte? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 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