Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: 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 вся ветка

Текущий архив: 2004.02.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
1-79826
Amirka
2004-02-11 10:10
2004.02.25
Использование сторонних dll


3-79573
Игорь
2004-01-29 14:15
2004.02.25
Вывод значения текстового поля из базы данных в отчет


1-79906
Budy
2004-02-09 15:20
2004.02.25
Align у TEdit


1-79901
Сергей Петров
2004-02-10 00:07
2004.02.25
Windows XP наглухо зависает при выполнении кода


3-79594
Layner
2004-02-02 16:12
2004.02.25
Подскажите плз, как из тригерра(MS SQL) получить некоторые знач.