Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.031 c
14-80275
OF
2004-02-04 06:37
2004.02.25
Конвертор VB в Delphi


1-79961
jeka_t
2004-02-13 18:06
2004.02.25
Как переименовать файл используя Делфи?


3-79599
Dimich1978
2004-02-02 08:14
2004.02.25
Как программно подключится к mdb через ADOTable


1-79724
smolin
2004-02-12 11:21
2004.02.25
Функция перемещения файла


9-79522
NailMan
2003-08-11 12:58
2004.02.25
Как сделать переходы между менюшками?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский