Форум: "Потрепаться";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизСекундомер... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c