AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Weiterlernen

Ein Thema von teodorfon · begonnen am 12. Jul 2016 · letzter Beitrag vom 12. Aug 2016
Antwort Antwort
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

AW: Weiterlernen

  Alt 8. Aug 2016, 09:17
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.
Sebastian
  Mit Zitat antworten Zitat
teodorfon

Registriert seit: 12. Jul 2016
Ort: Bosnien und Herzegowina
17 Beiträge
 
#2

AW: Weiterlernen

  Alt 8. Aug 2016, 23:20
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...

Geändert von teodorfon ( 8. Aug 2016 um 23:24 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Weiterlernen

  Alt 8. Aug 2016, 23:37
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 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.

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

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

Geändert von nahpets ( 8. Aug 2016 um 23:59 Uhr) Grund: Hatte übersehen, das rüchwärts gezählt werden soll :-( - Memo an mich: Erst lesen dann schreiben ;-)
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Weiterlernen

  Alt 8. Aug 2016, 23:38
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.
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 1. Dez 2003
Ort: Luterbach (CH)
693 Beiträge
 
Delphi 12 Athens
 
#5

AW: Weiterlernen

  Alt 8. Aug 2016, 23:45
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;
Roland

Geändert von blawen ( 8. Aug 2016 um 23:49 Uhr)
  Mit Zitat antworten Zitat
teodorfon

Registriert seit: 12. Jul 2016
Ort: Bosnien und Herzegowina
17 Beiträge
 
#6

AW: Weiterlernen

  Alt 8. Aug 2016, 23:54
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?
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Weiterlernen

  Alt 8. Aug 2016, 23:57
Auch unter Delphi 7 solltest du DateUtils in den uses einbinden können:

Delphi-Quellcode:
implementation

uses
  DateUtils;
Sebastian
  Mit Zitat antworten Zitat
teodorfon

Registriert seit: 12. Jul 2016
Ort: Bosnien und Herzegowina
17 Beiträge
 
#8

AW: Weiterlernen

  Alt 11. Aug 2016, 20:05
Auch unter Delphi 7 solltest du DateUtils in den uses einbinden können:

Delphi-Quellcode:
implementation

uses
  DateUtils;
Achsoooooo.
Ehm,ok jetzt klappt fast alles nur dass sich der timer nicht wiederholt.Die labele zeigt nur 00:00:59 an,und nach einer sekunde bleibt es auf 00:00:59.
Delphi-Quellcode:
var
  Form1: TForm1;
  TotalTime,x:TTime;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
totaltime := IncSecond (0, 60);
totaltime := IncSecond (totaltime,-1); //Versucht durch "x" variable zu ersetzen,gleiches resultat.
label1.Caption:=Timetostr(totaltime );

end;

end.

Geändert von teodorfon (11. Aug 2016 um 20:47 Uhr)
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

AW: Weiterlernen

  Alt 11. Aug 2016, 21:01
Noch einmal - das Initialisieren der totaltime Variable gehört nicht in das OnTimer-Event. Du setzt bei jedem Durchlauf totaltime erst auf 60, dann auf 59 Sekunden.
Diese Intialisierung solltest du z.B. im OnCreate des Formulars durchführen.
Sebastian
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:18 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 by Thomas Breitkreuz