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... ;)
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';
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';
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 ;)
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'
:(
.. 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...
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...