[DELPHI] konwersja milisekund.

0

Witam.
Pisze odtwarzacz mp3, i mam problem z wyświetleniem czasu ścieżki MM:SS np. (01:00 / 02:30)
MediaPlayer1.Position - zwraca pozycję odtważanej ścieżki w milisekundach (jako Ineger).
Pytanie, jak taki czas w milisekundach zapisać jako TDateTime?

0

Trzeba to podzielić przez stałą równą liczbie milisekund w ciągu doby.

0

Z tego będzie b. mała liczba. Ale jak to zapisać do TDateTime? (Konwersja Float -> TDateTime). Chodzi o to, że z TDateTime'a wyciągnąłbym sekundy i minuty, opcjonalnie godziny.

0

Do to tego potrzeba aż TDateTime? Samo TTime nie wystarczy? :>

A może po prostu policzyć to prostymi operacjami matematycznymi, takimi jak dzielenie i reszta z dzielenia (liczba minut = liczba sekund / 60).

0

Operacje arytmetyczne:

var
  Pos : Integer;
  Len : Integer;
  FPos : Float;
begin
  Pos:=MediaPlayer1.Position; // np. 90000 milisekund
  Len:=MediaPlayer1.Length;
  FPos:=(Pos/1000); // Sekundy np. 90
  FPos:=(FPos/60); // Minuty 1,5
  // Jeśli zapisać w formacie MM:SS trzeba od minut odjąć to co jest po przecinku (1,5-0,5 = 1) do MM, a SS to 0,5 * 60 = 30 do SS.
end;

Nie obejdzie się bez konwertowania na ciąg. Jak konwertowałem i rozbijałem z powrotem to wyskakiwał mi błąd 0,336 is not a valid integer value.
Dlatego wole użyć TDateTime, lub j. w. TTime

0

Dla formalności: TDateTime = Double, zniknie problem liczb z przecinkiem.

0

A ten dabel to jest dość precyzyjny by na milisekundy liczyć? Niezbyt mi się podoba takie podejście…

0
Rafieldex napisał(a)

Nie obejdzie się bez konwertowania na ciąg. Jak konwertowałem i rozbijałem z powrotem to wyskakiwał mi błąd 0,336 is not a valid integer value.
Dlatego wole użyć TDateTime, lub j. w. TTime

A o dzieleniu całkowitym to kolega słyszał? TDateTime również nie bardzo da się tu zastosować.

Mały przykład, jak można to rozwiązać:

procedure TForm1.Timer1Timer(Sender: TObject);
var Len, Pos: Integer;
    h, m, s: Byte;
begin
  MediaPlayer1.TimeFormat:= tfMilliseconds;
  Len:= MediaPlayer1.Length;
  Pos:= MediaPlayer1.Position;
  h:= Pos div 3600000;
  m:= Pos mod 3600000 div 60000;
  s:= Pos mod 60000 div 1000;
  Label1.Caption:= Format('Elapsed: %d:%.2d:%.2d', [h, m, s]);
  h:= (Len - Pos) div 3600000;
  m:= (Len - Pos) mod 3600000 div 60000;
  s:= (Len - Pos) mod 60000 div 1000;
  Label2.Caption:= Format('Remaining: %d:%.2d:%.2d', [h, m, s]);
end;

PS. Czy w Delphi to w ogóle jest TTime? U mnie w "Siódemce" nie ma

0

No nie, gdzie ja miałem łeb, mod i div. simplex, dzięki ;). Temat uważam za zakończony.

1 użytkowników online, w tym zalogowanych: 0, gości: 1