Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Zamanı hesaplama (Saat)
#10
(21-07-2024, Saat: 12:23)mrmarman Adlı Kullanıcıdan Alıntı: Aramaktansa yeniden yazmak daha kolay geldi. Kolları sıvadım size üç tane birbiri ile ilişkili fonksiyon hazırladım. 

Dönüşüm fonksiyonlarında FPS değeri girmezseniz (özgürlük için bir varsayılan atadım) varsayılan olarak 25.0 FPS (PAL sistemi) kabul edilir. 


type tTimeCode = record
  H, M, S, F : Integer;
end;

function StrToTimeCode( aTC : string ): tTimeCode;
var
  LSL : TStringList;
begin
  result := default(tTimeCode);

  LSL := TStringList.Create;
  try
    LSL.Delimiter := ':';
    LSL.DelimitedText := aTC;
    while LSL.Count < 4
      do
        LSL.Add('00');

    with result do
    begin
      H := StrToInt(LSL[0]);
      M := StrToInt(LSL[1]);
      S := StrToInt(LSL[2]);
      F := StrToInt(LSL[3]);
    end;

  finally
    FreeAndNil(LSL);
  end;
end;

function TimeCodeToFrame( aTC: tTimeCode; aFPS: Double = 25.0 ): Double;
begin
  result := 0
            + aTC.H*60*60*aFPS
            + aTC.M*60*aFPS
            + aTC.S*aFPS
            + aTC.F;
end;

function FrameToTimeCode( aFrame: Double; aFPS: Double = 25.0 ): tTimeCode;
begin
  result := Default(tTimeCode);

  if aFrame > 0 then
  begin
    result.H  := trunc(aFrame / aFps / 60 / 60 );
    aFrame := aFrame - (result.H  * 60 * 60 * aFPS);
    result.M  := trunc(aFrame / aFps / 60 );
    aFrame := aFrame - (result.M  * 60 * aFPS);
    result.S  := trunc(aFrame / aFps );
    aFrame := aFrame - (result.S  * aFPS);
    result.F := Round(aFrame);
  end;
end;




Kullanım Örneği için boş bir projede Forma bir tane MEMO ve BUTTON ekleyip aşağıdaki il deneyin


procedure TForm1.BitBtn1Click(Sender: TObject);
var
  LTC_01 : tTimeCode;
  LTC_02 : tTimeCode;
  LFr_01 : double;
  LFr_02 : double;
begin
  LTC_01 := StrToTimeCode('01:00:00:14');
  LTC_02 := StrToTimeCode('02:00:00:13');

  LFr_01 := TimeCodeToFrame(LTC_01);
  LFr_02 := TimeCodeToFrame(LTC_02);

  With LTC_01 do
  Memo1.Lines.Add( 'IN.: ' + format('%.2d:%.2d:%.2d:%.2d', [H,M,S,F]) );

  Memo1.Lines.Add( 'IN. Frame(s): ' + format('%0.2f', [ LFr_01 ]) );

  With LTC_02 do
  Memo1.Lines.Add( 'OUT: ' + format('%.2d:%.2d:%.2d:%.2d', [H,M,S,F]) );

  Memo1.Lines.Add( 'OUT Frame(s): ' + format('%0.2f', [ LFr_02 ]) );

  With FrameToTimeCode(LFr_02 - LFr_01) do
  Memo1.Lines.Add( 'Duration  : ' + format('%.2d:%.2d:%.2d:%.2d', [H,M,S,F]) );

  Memo1.Lines.Add( 'Duration Frame(s): ' + format('%0.2f', [ LFr_02 - LFr_01 ] ) );
end;


Sonuç şu değerler ile oluşacaktır :

IN.: 01:00:00:14
IN. Frame(s): 90014,00

OUT: 02:00:00:13
OUT Frame(s): 180013,00

Duration  : 00:59:59:24
Duration Frame(s): 89999,00

Çok, çok teşekkür ederim saygılarımla @mrmarman
Cevapla


Bu Konudaki Yorumlar
Zamanı hesaplama (Saat) - Yazar: Kral - 20-07-2024, Saat: 23:30
Cvp: Zamanı hesaplama (Saat) - Yazar: Tuğrul HELVACI - 21-07-2024, Saat: 00:36
Cvp: Zamanı hesaplama (Saat) - Yazar: Kral - 21-07-2024, Saat: 10:32
Zamanı hesaplama (Saat) - Yazar: mrmarman - 21-07-2024, Saat: 09:23
Zamanı hesaplama (Saat) - Yazar: mrmarman - 21-07-2024, Saat: 11:13
Cvp: Zamanı hesaplama (Saat) - Yazar: Kral - 21-07-2024, Saat: 11:26
Zamanı hesaplama (Saat) - Yazar: mrmarman - 21-07-2024, Saat: 11:41
Cvp: Zamanı hesaplama (Saat) - Yazar: Kral - 21-07-2024, Saat: 12:11
Zamanı hesaplama (Saat) - Yazar: mrmarman - 21-07-2024, Saat: 12:23
Cvp: Zamanı hesaplama (Saat) - Yazar: Kral - 22-07-2024, Saat: 17:53

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  saat biciminin algilanmasi 12 saat veya 24 saat sadikacar60 1 708 11-11-2024, Saat: 09:36
Son Yorum: hi_selamlar
  Resmi Tatil Hesaplama bydelphi 3 1.603 09-11-2022, Saat: 12:03
Son Yorum: bydelphi
  Dakika farkı hesaplama varyemez 1 1.441 05-05-2022, Saat: 09:57
Son Yorum: RAD Coder
  Tarih Farkı Hesaplama OZCANK 12 6.032 18-11-2021, Saat: 09:32
Son Yorum: COMMANDX
  TIdFtp Toplam Kullanılan Alan Hesaplama Hakkında Yardım glagher 7 3.084 07-11-2021, Saat: 16:02
Son Yorum: mrmarman



Konuyu Okuyanlar: 1 Ziyaretçi