Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Zeitcode (https://www.delphipraxis.net/197269-zeitcode.html)

KodeZwerg 25. Jul 2018 18:29

AW: Zeitcode
 
FormatSettings hat gefehlt, so klappt es, ich habe es getestet mit Delphi 2009.
Delphi-Quellcode:
function GetMillisecondSpan(S1, S2: String): Int64;
var
  t1, t2: TDateTime;
  FS: TFormatSettings;
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FS);
  FS.DecimalSeparator := '.';
  FS.TimeSeparator := ':';
  FS.LongTimeFormat := 'hh:nn:ss.zzz';
  try
    t1 := StrToTime(S1, FS);
    t2 := StrToTime(S2, FS);
  finally
    Result := MilliSecondsBetween(t1, t2);
  end;
end;

procedure TForm1.DurationClick(Sender: TObject);
begin
  Duration.Text := IntToStr(GetMillisecondSpan('01:23:45.678', '01:23:45.901'));
end;
In diesem Beispiel ist Duration.Text = 223

Delphi-Quellcode:
function GetDateTimeSpan ( S1, S2: String ): TDateTime;
var
  t1, t2: TDateTime;
  FS: TFormatSettings;
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FS);
  FS.DecimalSeparator := '.';
  FS.TimeSeparator := ':';
  FS.LongTimeFormat := 'hh:nn:ss.zzz';
  try
    t1 := StrToTime(S1, FS);
    t2 := StrToTime(S2, FS);
  finally
    Result := MilliSecondsBetween(t1, t2) / (1000.0 * 86400);
  end;
end;

procedure TForm1.DurationClick(Sender: TObject);
var
  FS: TFormatSettings;
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FS);
  FS.DecimalSeparator := '.';
  FS.TimeSeparator := ':';
  FS.LongTimeFormat := 'hh:nn:ss.zzz';
  Duration.Text := TimeToStr(GetDateTimeSpan('01:23:45.678','01:23:45.901'), FS);
end;
In diesem Beispiel ist Duration.Text = 00:00:00.223

Ich hoffe nun ist dieser Thread zufriedenstellend erledigt.

p80286 25. Jul 2018 19:07

AW: Zeitcode
 
Zitat:

Zitat von Dilom (Beitrag 1408683)
Stunden, Minuten, Sekunden, Rahmenberechnung


Hours, Minutes, seconds, frames - Hours, Minutes, seconds, frames = 01:00:00:00 :?::?::?:

Das erinnert mich an die gute alte Audio-CD.
Zitat:

The track positions are referenced by absolute timecode, relative to the start of the program area, in MSF format: minutes, seconds, and fractional seconds called frames. Each timecode frame is one seventy-fifth of a second, and corresponds to a block of 98 channel-data frames
Näheres hier

Gruß
K-H

KodeZwerg 26. Jul 2018 06:35

AW: Zeitcode
 
Zitat:

Zitat von p80286 (Beitrag 1408694)
Näheres hier

Habe mir das mal durchgelesen mit den Frames (ich pers. kenne Frames nur von Video-Inhalten bzw Video-Schnitt-Tools), selbst bei CD scheint es da zwei verschiedene Frame-Berechnungen zu geben.

himitsu 26. Jul 2018 09:36

AW: Zeitcode
 
Zitat:

Zitat von Dilom (Beitrag 1408689)
es gibt einen Fehler : Hata:: Hata:: Hata::

Ja, nur ist der Fehler, dass jemand vergisst den Fehler zu nennen.

Strg+C in Dialogen und Strg+V hier im Texteditor helfen, wenn man nocht abschreiben oder auf den Monitor schießen möchte.


Und ansonsten hatte ich schon alles gesagt, was die "Frames" oder sonstwas betrifft, welches keine Millisekunden sind, sowie zum Format der Datums-String.

Dilom 26. Jul 2018 14:40

AW: Zeitcode
 
Zitat:

Zitat von KodeZwerg (Beitrag 1408693)
FormatSettings hat gefehlt, so klappt es, ich habe es getestet mit Delphi 2009.
Delphi-Quellcode:
function GetMillisecondSpan(S1, S2: String): Int64;
var
  t1, t2: TDateTime;
  FS: TFormatSettings;
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FS);
  FS.DecimalSeparator := '.';
  FS.TimeSeparator := ':';
  FS.LongTimeFormat := 'hh:nn:ss.zzz';
  try
    t1 := StrToTime(S1, FS);
    t2 := StrToTime(S2, FS);
  finally
    Result := MilliSecondsBetween(t1, t2);
  end;
end;

procedure TForm1.DurationClick(Sender: TObject);
begin
  Duration.Text := IntToStr(GetMillisecondSpan('01:23:45.678', '01:23:45.901'));
end;
In diesem Beispiel ist Duration.Text = 223

Delphi-Quellcode:
function GetDateTimeSpan ( S1, S2: String ): TDateTime;
var
  t1, t2: TDateTime;
  FS: TFormatSettings;
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FS);
  FS.DecimalSeparator := '.';
  FS.TimeSeparator := ':';
  FS.LongTimeFormat := 'hh:nn:ss.zzz';
  try
    t1 := StrToTime(S1, FS);
    t2 := StrToTime(S2, FS);
  finally
    Result := MilliSecondsBetween(t1, t2) / (1000.0 * 86400);
  end;
end;

procedure TForm1.DurationClick(Sender: TObject);
var
  FS: TFormatSettings;
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FS);
  FS.DecimalSeparator := '.';
  FS.TimeSeparator := ':';
  FS.LongTimeFormat := 'hh:nn:ss.zzz';
  Duration.Text := TimeToStr(GetDateTimeSpan('01:23:45.678','01:23:45.901'), FS);
end;
In diesem Beispiel ist Duration.Text = 00:00:00.223

Ich hoffe nun ist dieser Thread zufriedenstellend erledigt.



Danke. : Başparmak:

KodeZwerg 26. Jul 2018 17:12

AW: Zeitcode
 
Zitat:

Zitat von Dilom (Beitrag 1408776)
Danke. : Başparmak:

Bitte.

Uwe Raabe 26. Jul 2018 17:38

AW: Zeitcode
 
Jetzt möchte ich aber doch schon noch wissen, wie lang so ein Frame denn nun ist bzw. wie viele es davon in einer Sekunde gibt.

p80286 26. Jul 2018 22:39

AW: Zeitcode
 
75 Frames sollten 1 sec sein wenn ich mich recht erinnere.

Başparmak = :thumb:


Gruß
K-H

Uwe Raabe 26. Jul 2018 23:02

AW: Zeitcode
 
Zitat:

Zitat von p80286 (Beitrag 1408819)
75 Frames sollten 1 sec sein wenn ich mich recht erinnere

Dann kann man aber den Frame-Wert nicht einfach als Millisekunden interpretieren, weder mit führender noch mit angehängter 0. Zumindest wird das hier suggeriert:
Zitat:

Ändere die Edit.Texte in dieses Format 00:00:00.000,
Ausgehend vom ersten Post, was soll denn bei 00:00:01:11 - 00:00:00:12 herauskommen? Nach meinem Verständnis müsste das 00:00:00:74 sein.

Je nach Interpretation der Frames als Milli- oder Zentisekunden kommt da aber 00:00:00.999 oder 00:00:00.990 raus. Nur wenn man die Frames vorher in 1/75 Sekunden umrechnet passt das Ergebnis - bis auf die dabei entstehenden Rundungsfehler.

KodeZwerg 27. Jul 2018 05:35

AW: Zeitcode
 
Nur wenn Frames sich auf Audio-CD bezieht. Schaut mal hier: Frames per second ↔ Frames per millisecond Conversion


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:37 Uhr.
Seite 3 von 4     123 4      

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