[DELPHI] Blad w programie do odliczania czasu

0

Witam!
Adam Boduch napisal tutaj programik do odliczania czasu (link: http://4programmers.net/article.php?id=64). Tak sie sklada, ze cos takiego bylo mi wlasnie potrzebne. Niestety w programie jest blad w tych liniach:

  if wSec = 0 then  // sprawdz, czy liczba sekund nie rowna sie przypadkiem 0
  begin
    wSec := 59; // w takim wypadku zmien te wartosc na 59

Przez to program "gubi" sekunde. Odlicza w ten sposob: 0:01:02; 0:01:01; 0:00:59; 0:00:58.
Niezbyt mam pomysly jak to zmienic, zeby dobrze dzialalo, bo wczesniej program konwertuje dany string na czas, wiec np wystapienie liczby sekund rownej -1 od razu wywoluje blad :( Dlatego w ten sposob:

if wSec = -1 then wSec := 59

nie da sie tego rozwiazac :( Jakies pomysly ??

0

Zmień na:

if wSec < 0 then

I upewnij się, że wSec jest typu, który może pomieścić liczby ujemne. Czyli byte odpada.

0

Dzieki za dobre checi, ale zerknij na kod programu Adama. Zeby pobrac godziny, sekundy, minuty on zmienia lancuch znakow z maskedita na format czasowy, a pozniej rozdziela go na poszczegolne czesci. Kod wyglada tak:

  BeforeTime := StrToTime(maskedit1.text); // pobierz tekst z kontrolki iprzeksztalc go na zmienna TTime
  DecodeTime(BeforeTime, wHour, wMin, wSec, wMSec); // rozłącz czas nagodziny, minuty i sekundy

Sprawa wyglada tak, ze jesli pozwoli sie programowi na "wpisanie" do maskedita liczby sekund mniejszej niz 0 to przy DecodeTime nastapi oczywiscie blad, bo nie bedzie mogl zamienic liczby -1 na sekundy !! tak wiec takie rozwiazanie odpada...

Kod zrodlowy tego programu mozna sciagnac tutaj: http://4programmers.net/file.php?id=378

0
if wSec = 0 then  // sprawdz, czy liczba sekund nie rowna sie przypadkiem 0
  begin
    wSec := 60; 

A linię dekrementacji sekund przenieś na koniec, przed aktualizacją Edita:

Dec(wSec); 
  AfterTime := EncodeTime(wHour, wMin, wSec, wMSec);
  meTime.Text := TimeToStr(AfterTime);
0

Dziala :) Wielkie dzieki za pomoc hes :)

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