Вниз
Скачать: CL | DM;

Секундомер...   Найти похожие ветки 

← →
hatchy ©   (2004-02-03 07:34) [0]

Как сделать секундомер, который бы считал не только секунды, а также минуты и часы. Чтобы он ,был вот такого типа 00:00:00,
как в игре lines.


← →
mfender ©   (2004-02-03 07:45) [1]

Можно попытать счастья, набросав что-то типа

var
CurrTime: TDateTime;

implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
CurrTime:=CurrTime+EncodeTime(0,0,1,0);
label1.Caption:=FormatDateTime("hh:nn:ss",CurrTime);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
CurrTime:=EncodeTime(0,0,0,0);
end;


← →
Думкин ©   (2004-02-03 08:08) [2]

я бы использовал GetTickCount, что и делал в двух играх, с таким таймером.


← →
mfender ©   (2004-02-03 08:14) [3]

А как его можно использовать в данной ситуации?


← →
Думкин ©   (2004-02-03 08:17) [4]

> [3] mfender © (03.02.04 08:14)

А в чем принципиальная трудность?


← →
mfender ©   (2004-02-03 08:19) [5]

Не могу постичь, как использовать эти цифры (милисекунды неизвестно отчего).


← →
Думкин ©   (2004-02-03 08:21) [6]

1. засекаем когда запустили таймер.
2. в например таймере или потоке считываем текущее значение.
3. вычисляем разность - переводим ее в наш формат визуализации.


← →
mfender ©   (2004-02-03 08:32) [7]

Все понятно. Не понятно одно: как эти милисекунды привести к традиционному виду TDateTime?


← →
Думкин ©   (2004-02-03 08:33) [8]

А посчитать?


← →
mfender ©   (2004-02-03 08:35) [9]

Считаю. Что-то не то выходит. Уже даже завтрак пригорел :))


← →
Думкин ©   (2004-02-03 08:37) [10]

Например, так:
function dToStr(n : integer) : string;
var T,h,m,ss : integer;
s : string;
begin
T := n;
T := T div 1000;
ss := T mod 60;
T := (T - ss) div 60;
m := (T mod 60);
T :=(T - m) div 60;
h := T mod 100;
if h<10
then s := "0"+IntToStr(h)
else s := IntToStr(h);
if m<10
then s := s + ":0"+IntToStr(m)
else s := s + ":" + IntToStr(m);
if ss<10
then s := s + ":0"+IntToStr(ss)
else s := s + ":" + IntToStr(ss);
Result := s
end;


← →
Verg ©   (2004-02-03 08:40) [11]

TDateTime - количество дней в вещественном представлении (double)

Так что, если умеешь переводить, например граммы в тонны, то и здесь все будет просто.


← →
mfender ©   (2004-02-03 08:45) [12]

Понятно. Ну, с математикой у меня всегда были проблемы. До такого бы сроду не догадался.
А чем предложенный мною способ хуже?


← →
Verg ©   (2004-02-03 08:53) [13]


> А чем предложенный мною способ хуже?


А при переводе секунды в TDateTime будет погрешность (очень маленькая, но будет). Продложенный тобой способ предлагает накапливать эти секунды вместе с этой погрешностью. Т.е. по мере счета суммарная погрешность будет накапливаться.
Лучше на каждом "тике" вычислять разность абсолютных величин. Тогда погрешность будет постоянной малой величиной (не будет накапливаться).


← →
mfender ©   (2004-02-03 08:55) [14]

Спасибо. Подумаю над этим.


← →
app ©   (2004-02-03 09:02) [15]

mfender ты чего в чужую ветку лезешь? Тебе что места не хватает, задай свой вопрос в своей отдельной ветке.

hatchy © (03.02.04 07:34)
Для этого не надо ограничивать секундомер 59 секундами, сделай его без размерный и лучше всего на основе функции NOW и одной вспомогательной переменной.


← →
Gero ©   (2004-02-03 09:02) [16]

Но ведь GetTickCount работает только до 4294967295 а потом обнуляется. А если нужно, чтобы он считал, скажем, два месяца? :)


← →
Думкин ©   (2004-02-03 09:05) [17]

Еще он хуже тем, что таймер работает не точно, а с погрешностью. Поэтому через какое-то время, он начнет обманывать.
В приведенном выше коде можно многое улучшить.
Но можно остановиться и на [11] Verg © (03.02.04 08:40).


← →
app ©   (2004-02-03 09:05) [18]

Gero © (03.02.04 09:02) [16]
А если нужно, то введи дополнительную переменую, количество кругов.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.019 c
7-80339
Zem!r
2003-12-08 07:31
2004.02.25
Замена shell а


1-79900
MainKaif
2004-02-10 09:21
2004.02.25
Консольные команды.


14-80235
Ломброзо
2004-02-04 15:17
2004.02.25
Вопрос меломанам


7-80314
Vitaly Grobshtein
2003-12-04 11:52
2004.02.25
Отключить темы WinXP


4-80365
zdn
2003-12-17 13:14
2004.02.25
Подключение к запущенному процесус




   Наверх