Pętla w Memo sumująca linie

0

Witam

procedure TForm1.Button1Click(Sender: TObject);
var
    a, b : TDateTime;
    i : integer;
begin
          for i:=0 to Memo1.Lines.Count -1 do begin 
                  a:=StrToTime(Memo1.Lines.Strings[0]);
                  b:=StrToTime(Memo1.Lines.Strings[i]);
         Edit1.Text:=FormatDateTime('hh:mm:ss', (a + b));
end;
end;

Napisałem taki kodzik, aby sumował mi godziny w Memo, jednak podaje sumę skrajnych linii, czyli zerowej i ostatniej.
Np.

02:02:05 <--- ta
05:10:05
03:04:30 <--- z tą
----------
05:06:35, zamiast 10:16:40.

Prosiłbym o wskazówkę, co tam skopałem. Dziękuję.

1

Ta pętla jest niepoprawna - nigdzie nie przechowujesz sumy czasów, a do tego w każdej jej iteracji konwertujesz łańcuch z indeksu 0; Musisz więc zarezerwować jedną zmienną, do której będzie dodawał wynik konwersji kolejnych linijek z komponentu:

procedure TForm1.Button1Click(Sender: TObject);
var
  tmSum: TTime;
  intToken: Integer;
begin
  tmSum := 0;

  for intToken := 0 to Memo1.Lines.Count - 1 do
    tmSum := tmSum + StrToTime(Memo1.Lines[intToken]);

  edtTimeSum.Text := FormatDateTime('hh:nn:ss', tmSum);
end;

Nie jestem pewien, czy bezpiecznie jest dodawać w ten sposób daty/czasy, więc o tym sobie doczytaj.

0

Dziękuję, o to mi chodziło. W sumie znalazłem w swoich zbiorach kod sumowania liczb całkowitych w Memo i mogłem tym się kierować. Kod był bardzo podobny do Twojego.
Sumowanie godzin jest OK, bo daje mi efekt "reszty", czyli jak suma będzie większa niż 24:00:00 to zostaje mi reszta, którą potrzebuję do innych celów, np. 25:46:12 -> 01:46:12. Taki sam efekt miałem w moim niedociągniętym kodzie.
Dzięki. :)

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