Fehler gefunden!
TL;DR: Version 7.2.4 installieren
Die ganze Geschichte, etwas weiter ausgeholt und mathematisch, aber vielleicht interessiert es jemanden:
Es handelte sich tatsächlich um Rundungsfehler. Um die Ursache zu identifizieren, musste ich etwas tiefer in die Funktionsweise von Delphi eintauchen. Tatsächlich verwendet Delphi für das Runden von Zahlen die floating point unit (FPU) der CPU. Und diese lässt sich über bestimmte Befehle in verschiedene Modi schalten: kaufmännisches Runden, immer aufrunden, immer abrunden, etc.
Mein Verdacht war, dass “irgendwer” diesen Modus versehentlich umgestellt hat, und zwar auf “immer abrunden”, weswegen die Zeitberechnungen nicht mehr korrekt waren. Dazu passte die Beobachtung, dass in deinem Video nur die durch drei teilbaren Stunden (0, 3, 6, 9, 12, 15, 18, 21) noch Daten anzeigten. Delphi verwendet nämlich Brüche für die Uhrzeiten benutzt (1 Tag = 1, und 1 Stunde = 1/24), und zwar als Dezimaldarstellung. Und die durch drei teilbaren Stunden sind Achtel-Tage, und das sind die einzigen Dezimalzahlen mit einer endlichen Anzahl an Nachkommastellen (1/8 = 0.125), bei denen also nicht gerundet werden muss.
Ich hatte zuerst in Verdacht, dass das eine externe DLL wie z.B. ein Soundprocessing-Plugin hätte sein können. Durch weitere Suche im Code bin ich dann aber darauf gestoßen, dass es von einer Fremdbibliothek verursacht wird, die ich seit Version 7.x für die Anzeige von Icons etc. verwende. Diese verändert tatsächlich kurzzeitig den Rundungs-Modus, setzt ihn normalerweise auch zurück, aber unter ganz bestimmten Bedingungen kann sie es “vergessen”, wodurch der Modus dann bis zum nächsten Neustart verstellt ist, und alle folgenden Rundungs-Operationen dann möglicherweise ein falsches Ergebnis liefern.
Einen Bugreport habe ich beim dortigen Entwickler bereits hinterlassen:
Ich habe den Code aber bei mir bereits gefixt, und eine Version 7.2.4 hochgeladen, in der das Problem aus der Welt geschafft sein sollte. Übernahme in v7.3 beta folgt in Kürze.