Главная страница
    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.48 MB
Время: 0.027 c
1-79908
AlexandrKu
2004-02-09 16:14
2004.02.25
Доступ к ячейкам Excel через OleContainer


7-80325
DelphiNew
2003-12-02 11:40
2004.02.25
Проблема приёма данных с СОМ порта


4-80379
deema
2003-12-14 19:20
2004.02.25
Как определить ширину текста в пункте меню?


14-80088
Карелин Артем
2004-02-04 13:19
2004.02.25
Если покупать Дельфи Б/У.......


14-80255
slippery
2004-02-03 16:21
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский