Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Weiterlernen (https://www.delphipraxis.net/189718-weiterlernen.html)

teodorfon 7. Aug 2016 13:09

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.

BUG 7. Aug 2016 16:23

AW: Weiterlernen
 
Zitat:

Zitat von teodorfon (Beitrag 1344318)
Will wirklich keine zeit von euch verschwenden. :?

Überlege wann Timer1Timer aufgerufen wird, und was in jeder der 3 Zeilen passiert. Am besten du schreibst das einfach hier als Antwort ... entweder springt dich beim Schreiben das Problem an oder wir können dir sagen, wo du eine falsche Annahme getroffen hast.

teodorfon 7. Aug 2016 17:43

AW: Weiterlernen
 
Zitat:

Überlege wann Timer1Timer aufgerufen wird
Der intervall ist ja auf 1000 was eine sekunde ist,also sollte sich die procedure jede sekunde wierholen,wenn nicht hab ich es nicht richtig verstanden.
Zitat:

und was in jeder der 3 Zeilen passiert
totaltime:=1000 Also das sollte eig. der anfangswert des CountDowns sein.
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;

SProske 8. Aug 2016 08:17

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:
//totaltime initialisieren
totaltime := IncSecond(0, 1000);

//1 Sekunde abziehen
totaltime := IncSecond(totaltime, -1);
Ich gehe einfach mal davon aus, dass du hier mit 1000 Sekunden arbeiten willst - sonst eben Millisekunden, Minuten oder Stunden verwenden.
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.

OlafSt 8. Aug 2016 08:20

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

teodorfon 8. Aug 2016 22:20

AW: Weiterlernen
 
Zitat:

Zitat von SProske (Beitrag 1344341)
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:
//totaltime initialisieren
totaltime := IncSecond(0, 1000);

//1 Sekunde abziehen
totaltime := IncSecond(totaltime, -1);
Ich gehe einfach mal davon aus, dass du hier mit 1000 Sekunden arbeiten willst - sonst eben Millisekunden, Minuten oder Stunden verwenden.
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.


Delphi-Quellcode:
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.
Fühl mich jetzt etwas doof...

nahpets 8. Aug 2016 22:37

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:
totaltime := totaltime - (1 / 86400);
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.

Delphi-Quellcode:
totaltime := IncSecond(toteltime,-1);
sollte die gleiche Wirkung haben.

Das Timerintervall muss nicht bei jedem Aufruf der des Timerereignisses neu gesetzt werden. Das
Delphi-Quellcode:
timer1.Interval := 1000;
kann entfallen.

SProske 8. Aug 2016 22:38

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.

blawen 8. Aug 2016 22:45

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:
...
timer1.Interval:=1000;
...
Der "zweite" Fehler liegt darin, dass Du eine Variable Namens IncSecond definierst.
Eigentlich möchtest Du ja die gleichnamige Funktion aufrufen - also die Zeile ersatzlos streichen.
Delphi-Quellcode:
var
  incsecond:TDateTime;

teodorfon 8. Aug 2016 22:54

AW: Weiterlernen
 
Zitat:

Zitat von blawen (Beitrag 1344431)
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:
...
timer1.Interval:=1000;
...
Der "zweite" Fehler liegt darin, dass Du eine Variable Namens IncSecond definierst.
Eigentlich möchtest Du ja die gleichnamige Funktion aufrufen - also die Zeile ersatzlos streichen.
Delphi-Quellcode:
var
  incsecond:TDateTime;

Dann kommt aber eine andere fehlermeldung, "undeclared identifier:"IncSecond".
Sollte ich sagen das ich Delphi 7 benutzte?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 Uhr.
Seite 3 von 5     123 45      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz