Delphi Can

Orjinalini görmek için tıklayınız: saat toplama
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhaba,

Bir alanım var CalismaSaati adında buraya girilen değerlerini toplamını almak istiyorum,

Örneğin: 
15:50:10
20:15:10

Toplam : 36:05:20

Şeklinde nasıl yapabilirim aşağıdaki kod ile saati toplayabiliyorum fakat dakikayı 65 yazıyor.

Teşekkürler.

var
 Bookmark: TBookmark;
 ToplamCalisma: TTime;
 Saat, Dakika, Saniye, MiliSaniye: Word;
 TSaat, TDakika, TSaniye, TMiliSaniye: Double;
begin
 TSaat := 0;
 TDakika := 0;
 TSaniye := 0;
 TMiliSaniye := 0;
 LabelCalismaSaati.Caption := '';
 DM.SoforFisKayitDB.Open;
 Bookmark := DM.SoforFisKayitDB.GetBookmark;
 DM.SoforFisKayitDB.DisableControls;

 try
   DM.SoforFisKayitDB.First;
   while not DM.SoforFisKayitDB.EOF do
   begin
     DecodeTime(DM.SoforFisKayitDB.FieldByName('CalismaSaati').AsDateTime, Saat, Dakika, Saniye, MiliSaniye);
     TSaat := TSaat + Saat;
     TDakika := TDakika + (Dakika / 60);
     TSaniye := TSaniye + (Saniye / 3600);
     TMiliSaniye := TMiliSaniye + MiliSaniye;

     DM.SoforFisKayitDB.Next;

   end;
 finally
   DM.SoforFisKayitDB.GotoBookmark(Bookmark);
   DM.SoforFisKayitDB.FreeBookmark(Bookmark);
   DM.SoforFisKayitDB.EnableControls;

   ShowMessage(FloatToStr(TSaat));
   ShowMessage(FloatToStr(TDakika));
   ShowMessage(FloatToStr(TSaniye));
{
   LabelCalismaSaati.Caption := 'Toplam Çalışma Saati : ' + DateTimeToStr(ToplamSaat) + ' Saat';
   LabelToplamFis.Caption := ' Kayıt Sayısı : ' + IntToStr(DM.SoforFisKayitDB.RecordCount) + ' Adet';}
 end;
(24-12-2020, Saat: 11:20)erdogan Adlı Kullanıcıdan Alıntı: [ -> ]Merhaba,

Bir alanım var CalismaSaati adında buraya girilen değerlerini toplamını almak istiyorum,

Örneğin: 
15:50:10
20:15:10

Toplam : 36:05:20

Şeklinde nasıl yapabilirim aşağıdaki kod ile saati toplayabiliyorum fakat dakikayı 65 yazıyor.

Teşekkürler.

var
 Bookmark: TBookmark;
 ToplamCalisma: TTime;
 Saat, Dakika, Saniye, MiliSaniye: Word;
 TSaat, TDakika, TSaniye, TMiliSaniye: Double;
begin
 TSaat := 0;
 TDakika := 0;
 TSaniye := 0;
 TMiliSaniye := 0;
 LabelCalismaSaati.Caption := '';
 DM.SoforFisKayitDB.Open;
 Bookmark := DM.SoforFisKayitDB.GetBookmark;
 DM.SoforFisKayitDB.DisableControls;

 try
   DM.SoforFisKayitDB.First;
   while not DM.SoforFisKayitDB.EOF do
   begin
     DecodeTime(DM.SoforFisKayitDB.FieldByName('CalismaSaati').AsDateTime, Saat, Dakika, Saniye, MiliSaniye);
     TSaat := TSaat + Saat;
     TDakika := TDakika + (Dakika / 60);
     TSaniye := TSaniye + (Saniye / 3600);
     TMiliSaniye := TMiliSaniye + MiliSaniye;

     DM.SoforFisKayitDB.Next;

   end;
 finally
   DM.SoforFisKayitDB.GotoBookmark(Bookmark);
   DM.SoforFisKayitDB.FreeBookmark(Bookmark);
   DM.SoforFisKayitDB.EnableControls;

   ShowMessage(FloatToStr(TSaat));
   ShowMessage(FloatToStr(TDakika));
   ShowMessage(FloatToStr(TSaniye));
{
   LabelCalismaSaati.Caption := 'Toplam Çalışma Saati : ' + DateTimeToStr(ToplamSaat) + ' Saat';
   LabelToplamFis.Caption := ' Kayıt Sayısı : ' + IntToStr(DM.SoforFisKayitDB.RecordCount) + ' Adet';}
 end;

    TSaat := Saat;
    TDakika := Dakika;
    TSaniye := Saniye;
    TMiliSaniye := MiliSaniye;
Merhaba,

iki saatin toplamıda olabilir

caption:= TimeToStr(cxCalismaSaati.Time + cxBeklemeSaati.Time);
(24-12-2020, Saat: 13:49)erdogan Adlı Kullanıcıdan Alıntı: [ -> ]Merhaba,

iki saatin toplamıda olabilir

caption:= TimeToStr(cxCalismaSaati.Time + cxBeklemeSaati.Time);

Kendi yazdığım ve projelerimde kullandığım kütüphanemden üç fonksiyon aşağıdadır. Olduğu gibi kullanabilirsin ya da üzerinde oynayarak istediğini yaparsın.


function RightPad(S: string; Ch: Char; Len: Integer): string;
var
  RestLen: Integer;
begin
  Result  := S;
  RestLen := Len - Length(s);
  if RestLen < 1 then Exit;
  Result := StringOfChar(Ch, RestLen) + S;
end;

function FloatToHHMM(sFloat: Double): string;
begin
 Result := '';
if Trunc(sFloat) > 0 then
   Result := Result + RightPad(IntToStr(Trunc(sFloat)),'0', 2) +':'
 else
   Result := Result + '00:';

 if Trunc(Frac(sFloat) * 60) > 0 then
   Result := Result + RightPad(IntToStr(Round(Frac(sFloat) * 60)),'0', 2)
 else
   Result := Result + '00';
 Result := Trim(Result);
end;

function FloatToHHMMSS(sFloat: Double): string;
begin
 Result :=
  IntToStr(Trunc(sFloat) div 60) +':' +
   RightPad(IntToStr(Trunc(sFloat) mod 60),'0', 2) +':' +
   RightPad(IntToStr(Round(Frac(sFloat) * 60)),'0', 2);
end;
çok teşekkür ederim,

kullanımı nasıl acaba ?

Merhaba

bir örnek vermeniz mümkün mü acaba

Teşekkürler
(24-12-2020, Saat: 14:22)erdogan Adlı Kullanıcıdan Alıntı: [ -> ]çok teşekkür ederim,

kullanımı nasıl acaba ?

Merhaba

bir örnek vermeniz mümkün mü acaba

Teşekkürler

caption:= FloatToHHMM(cxCalismaSaati.Time + cxBeklemeSaati.Time);
Doğru sonuç vermiyor Sad

11:00:00 + 11:00:00

sonuç : 00:55
(24-12-2020, Saat: 15:06)erdogan Adlı Kullanıcıdan Alıntı: [ -> ]Doğru sonuç vermiyor Sad

11:00:00 + 11:00:00

sonuç :  00:55

caption:= FloatToHHMM((cxCalismaSaati.Time + cxBeklemeSaati.Time)*24);
aşağıdaki linkte hourspan ve timespan var ancak uses e dateutils, TimeSpan, hourspan eklemek lazım, bunlar tam olarak işinizi görür.

https://stackoverflow.com/questions/2578...ing-delphi

https://www.tek-tips.com/viewthread.cfm?qid=602869
(24-12-2020, Saat: 15:23)bibilen Adlı Kullanıcıdan Alıntı: [ -> ]
(24-12-2020, Saat: 15:06)erdogan Adlı Kullanıcıdan Alıntı: [ -> ]Doğru sonuç vermiyor Sad

11:00:00 + 11:00:00

sonuç :  00:55

caption:= FloatToHHMM((cxCalismaSaati.Time + cxBeklemeSaati.Time)*24);

Çok Teşekkür Ederim.