Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Süre
#1
Selam;

FMX tarafında videonun süresini hesaplamak istiyorum; Fakat işin içine kare durumu işin içinden çıkamadım. Konu hakkında bilgilerinizi rica ederim.


Örnek:
Video 00:00:10:05 da başladı, 00:00:30:05'a geldiğinde duration 00:00:20:05 olması lazım bu durumu nasıl çözerim?



procedure TForm1.PLYeniClick(Sender: TObject);
var
  HH, MM, SS, ms: Word;
  TimeIn, TimeOut: String;
begin
  DecodeTime(Time, HH, MM, SS, ms);
  Form1.giris.Text := format('%d:%d:%d:%d', [HH, MM, SS, ms]);
  Form1.cikis.Text := format('%d:%d:%d:%d', [HH, MM, SS, ms]);
end;

procedure TForm1.HesaplaClick(Sender: TObject);
var
  J: Integer;
  Start, Sure: TTime;
begin
  Start := StrToTime(Form1.giris.Text);
  Sure := StrToTime(Form1.cikis.Text);
  Form1.Duration.Text := TimeToStr(Start + Sure);
end;
Cevapla
#2
Videolarda saniyedeki kare sayısı değişken olduğu için zaman farkları genelde saniye cinsinden alınır.

Fazla uğraşmak istemiyorsan en kolayı HMS'leri S'ye çevirip saniye farkı almak, sonra bu farkı yeniden HMS'ye çevirmek olabilir.

DateUtils içinde saniye fonksiyonları mevcut. Ayrıca doğrudan saat farkı alan fonksiyonlar da mevcut.
Cevapla
#3
Videoyu nerden nasıl oynattığınızı belirtmemişsiniz ama varsayılan düşünüldüğünde media player dersek videoyu oynatmakta kullandığın bileşenin bu özelliği olması gerekiyor. Eğer media player ise kullanımıyla ilgili forumda bolca örnek var işinize yarayabilir.
Cevapla
#4
Sanırım yanlış ifade ettim soruyu.


Toplam üç adet edit var (in, out, duration)

Edit1 01:00:00:00
Edit2 02:00:00:00
Edit3'e Edit2 - Edit1 = 01:00:00:00 olarak nasıl hesaplama yaptırabilirim? normal şartlarla aşağıdaki kodlarla işlemi yapabiliyorum ama işin içine kare denilen olay girince çözemedim.



var
S1, S2: TDateTime;
begin
S1 := StrToTime(Edit1.Text);
S2 := StrToTime(Edit2.Text);
Edit3.Text := (TimeToStr(S1 - S2));
Cevapla
#5
(22-07-2018, Saat: 09:02)dilo Adlı Kullanıcıdan Alıntı: Sanırım yanlış ifade ettim soruyu.


Toplam üç adet edit var (in, out, duration)

Edit1 01:00:00:00
Edit2 02:00:00:00
Edit3'e Edit2 - Edit1 = 01:00:00:00 olarak nasıl hesaplama yaptırabilirim? normal şartlarla aşağıdaki kodlarla işlemi yapabiliyorum ama işin içine kare denilen olay girince çözemedim.



var
S1, S2: TDateTime;
begin
S1 := StrToTime(Edit1.Text);
S2 := StrToTime(Edit2.Text);
Edit3.Text := (TimeToStr(S1 - S2));

Yanlış görmediysen konuyu siz değil, @serhat açmıştı.
Cevapla
#6
Bu konuda MinuteSpan fonksiyonu sanırım işinizi çözecektir.  Kullanmadan önce usesa math ve dateutils eklemeyi unutmayın.
Alıntı:- MinutesBetween : Verilen iki tarih arasındaki dakika farkını verir. Dakika tam olduğu zaman değeri artırır. örneğin 9:00:00 ile 9:00:59 arasındaki farkı 0 (sıfır) olarak döndürür. 

- MinuteSpan : Verilen iki tarih arasındaki dakika farkını verir. Dakika tam olmasa bile küsuratlı olarak değeri döndürür. örneğin 9:00:00 ile 9:00:59 arasındaki farkı 0,998 dakika gibi döndürür.

Zaman fonksiyonları

Kullanıma örnek :

edit6.text:= (floattostr(ceil(MinuteSpan((strtodatetime(edit4.text)),(strtodatetime(edit5.text))))));
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi