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
Seite 3 von 5     123 45      
teodorfon

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

AW: Weiterlernen

  Alt 7. Aug 2016, 13:09
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.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#22

AW: Weiterlernen

  Alt 7. Aug 2016, 16:23
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.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
teodorfon

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

AW: Weiterlernen

  Alt 7. Aug 2016, 17:43
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 )
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;
  Mit Zitat antworten Zitat
SProske

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

AW: Weiterlernen

  Alt 8. Aug 2016, 08: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
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#25

AW: Weiterlernen

  Alt 8. Aug 2016, 08:20
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 ?
  Mit Zitat antworten Zitat
teodorfon

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

AW: Weiterlernen

  Alt 8. Aug 2016, 22: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 22:24 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#27

AW: Weiterlernen

  Alt 8. Aug 2016, 22: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 22: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
 
#28

AW: Weiterlernen

  Alt 8. Aug 2016, 22: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
Online

Registriert seit: 30. Nov 2003
Ort: Luterbach (CH)
654 Beiträge
 
Delphi 12 Athens
 
#29

AW: Weiterlernen

  Alt 8. Aug 2016, 22: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 22:49 Uhr)
  Mit Zitat antworten Zitat
teodorfon

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

AW: Weiterlernen

  Alt 8. Aug 2016, 22: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
Antwort Antwort
Seite 3 von 5     123 45      


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 23:23 Uhr.
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