Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zwei TDateTimes vergleichen (https://www.delphipraxis.net/64662-zwei-tdatetimes-vergleichen.html)

xZise 6. Mär 2006 18:55


Zwei TDateTimes vergleichen
 
Ich habe zwei TDateTimes und einen Timer, der jede 1/1000 Sekunde "ausschlägt".

Nun möchte ich beide vergleichen und überprüfen, ob eine Sekunde vergangen ist.
(Ein TDateTime bleibt erhalten)

Delphi-Quellcode:
procedure TFFreggels.VersinkTimerTimer(Sender: TObject);
var
  i : Byte;
begin
  for i := 0 to High(Diamant) do begin
    if Diamant[i].sink then begin // nicht diese!!
      if Aktuelle Zeit - Andere Zeit = 1 {Sekunde} then //die Zeile!
        //mache das und das
    end;
  end;
end;
Was muss ich jetzt als Bedingung in die 2. If-Bedingung setzen?

Union 6. Mär 2006 19:01

Re: Zwei TDateTimes vergleichen
 
Delphi-Referenz durchsuchenSecondsBetween

ManuMF 6. Mär 2006 19:03

Re: Zwei TDateTimes vergleichen
 
Delphi-Referenz durchsuchenCompareDateTime könnte evtl. auch hilfreich sein.

Gruß,
ManuMF

xZise 6. Mär 2006 19:11

Re: Zwei TDateTimes vergleichen
 
Danke! Das Between funzt :D Man muss nur aufpassen, dass wenn die eine TDateTime := Time is, dass die andere nicht Now ist ;) ansonsten hatte ich das etwas so um die 3.000...

Sharky 6. Mär 2006 19:17

Re: Zwei TDateTimes vergleichen
 
Zitat:

Zitat von xZise
...und einen Timer, der jede 1/1000 Sekunde "ausschlägt"....

Hai xZise,

unter Windows wirst Du es nicht schaffen einen "Delphi"-Timer beizubringen jeden ms "auszuschlagen".
Dafür ist der Timer-Event viel zu langsam ;-)

Ich meine wir hatten im Forum dazu schon einige Beitrage; Du must mal suchen.
Wenn ich mich dunkel erinnere ist die kleinste Zeit für einen Timer um die 15 ms. Aber auch das ist sehr ungenau weil der Timer-Event keine hohe Priorität im System hat.

xZise 6. Mär 2006 19:33

Re: Zwei TDateTimes vergleichen
 
Hmmm....

Das ist dann aber äußerst dumm ;)

So... Und nun mein 2. Problem: Ich habe einen Timer (Interval = 20 ms) und überprüfe immer dann (OnTimer) ob eine Sekunde vergangen ist! Nun kann es natürlich sein, dass er als Intervall 1001 hat! Gibt es dann eine Funktion, die einen Bestimmten bereich abdeckt?
Also z.B. von 988 bis 1012 ? Oder muss ich
Delphi-Quellcode:
if (Differenz > 988) and (Differenz < 1012) then...
nehmen?

Edit: Achso... Ich habe jetzt statt SecBetween MillisekBetween ;)
Aber es geht trotzdem noch nicht :?
Delphi-Quellcode:
procedure TFFreggels.VersinkTimerTimer(Sender: TObject);
var
  Status, i, Diff : Integer;
begin
  for i := 0 to High(Diamant) do begin
    [...]
      case Diamant[i].status of
          0: Status := 1000;
          1: Status := 1750;
          2: Status := 2400;
          3: Status := 2900;
      end;
      Diff := MillisecondsBetween(Diamant[i].startTime, Time);
      if (Diff > Status - 12) and (Diff < Status + 12) then begin
        [...] // das hier wird NICHT ausgeführt
      end;
    end;
  end;
end;


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