[delphi] wirtualny zegar

0

Witam! :D
Mam problem :( , bo nie wiem jak zrobić wirtualny zegar. Tzn. chodzi o to aby on działał na takiej samej zasadzie co zegar rzeczywisty. Zegar rzeczywisty odmierza czas co sekunde a ja chciałbym zrobic taki co pokazuje takie godziny jak: 6:00 8:00 10:00 12:00 14:00 16:00 18:00 20:00 22:00 24:00 zmieniajac sie powiedzmy co 2 lub 3 minuty czasu rzeczywistego.
Czy ktoś by mi umiał pomóc...
Z góry dziękuję i czekam na komentarze... ;)

0

np dajesz unit DateUtils, bierzesz datę którą chcesz mieć na początku, bierzesz ją w formacie TDateTime, potem zapisujesz do zmiennej:

var zmienna: int64;

begin
zmienna := DateTimeToUnix(DataNaPoczatku);
end;

a potem np w timerku pobierasz aktualną datę, i dajesz coś w stylu:

NowyDateTime := UnixToDateTime(
(DateTimeToUnix(Now) - zmienna) * 3 + zmienna);

i chyba czas będzie w NowyDateTime tyle że 3 razy przyspieszony ...

w Twoim przypadku przyspieszasz czas nie 3 a 60 razy i pokazujesz tylko godziny, np:

IntToStr(GetHours(NowyDateTime)) + ':00';

dobra to była wersja w stylu "ke ?" a teraz:
dajesz zmienną

var h: byte;

i timer na 120000 a w nim:

h := (h + 2) mod 24;
Label1.Caption := IntToStr(h) + ':00';

0
Adamo napisał(a)

dobra to była wersja w stylu "ke ?"

:D hehe troszke się przeraziłem... hehe
ale poradził bym sobie chyba ;)
a takie pytanko:

zmienna := DateTimeToUnix(DataNaPoczatku);

jakiczas wstawić w DataNaPoczatku?? (w sekundach czy normalnie :) ??)

i rozumiem że to ta prostsza wersja ;)

var h: byte;

i timer na 120000 a w nim:

h := (h + 2) mod 24;
Label1.Caption := IntToStr(h) + ':00';

0

Ad1 w TDateTime, utworzona nie wiem przez co, może być zamiast tego "Now" to po prostu na początku programu będą się czasy zgadzać a po 2 minutach w programie minie 6

Ad2 no albo trudniejsza ... w każdym razie inna ;)

0
Adamo napisał(a)

Ad2 no albo trudniejsza ... w każdym razie inna ;)

ale jaśniejsza :)

aha jeszcze jedno:
co mam teraz zrobić, aby o określinej godzinie tego zegara wykonała się jakaś procedurka?? [wykorzystać pętle, czy jakoś inaczej] ;)

zrobiłem to drugim sposobem i cały czas pokazywało mi godzinę 14:00 nie wiem dlaczego.

natomiast co do 1-szego sposobu to wywaliło mi błędy:
Undeclared identifier: 'DataNaPoczatku'
Undeclared identifier: 'NowyDateTime'
Undeclared identifier: 'GetHours'
:(

0

.. i jest problem... Adamo zrobiłem tak jak mi 'podpowiedziałeś' ale nie chodzi tak jak powinno :( niestety po uruchomieniu aplikacji nie pokazuje godziny a jak troszke pozmienialem to pokazuje tylko godzinę 14...

0

Adamo rozwiązałem to troszke inaczej... i jak na razie sie sprawdza. :) Wygląda to tak:

var sec :integer

dodałem procedurke:

procedurke plusczas;
begin
        sec:=sec+1;
end;

a w timerku cosik takiego(przy odpowiednim intervale ;) ):

var czas:string;
begin
       czas:=inttostr(sec div 60)+':'+inttostr(sec mod 60); //godziny : minuty
       label1.caption:=czas;
end;

Dzięki za wszystko :) pozdrawiam...

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