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ż 2400 to zostaje mi reszta, którą potrzebuję do innych celów, np. 2512 -> 0112. 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