Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

сравнить текущее время с заданным DateTimePicker [D7]


Roman_S ©   (2007-03-18 08:46:00) 

Задаю время с помощью DateTimePicker. Подскажите - как при Form.Show задавать в нём текущее время? И, главное, - как сравнить текущее время с заданным в событии OnTimer (микросекунды я не задаю)?


Johnmen   (2007-03-18 20:17:00) [1]

Trunc(Frac(TimeVariable)*24) - часы
Trunc(Frac(TimeVariable-часы/24)*24*60) - минуты


Roman_S   (2007-03-18 18:52:00) [2]

Ну например незачем делать каждый раз DecodeTime(DateTimePicker1.Time, Hour2, Min2, Sec2, MSec2); Глобальные переменные или свойства(поля) формы задействовать.

- это дельный совет, СПАСИБО!


RASkov   (2007-03-18 13:52:00) [3]

> [7] Anatoly Podgoretsky ©   (18.03.07 13:39)


> if (Hour1 = Hour2) and (Min1 = Min2)


> Таймер на 100 мсек

Interval=10000 все-таки наверное...

> И как обойтись без лишних переменных:

Ну например незачем делать каждый раз DecodeTime(DateTimePicker1.Time, Hour2, Min2, Sec2, MSec2); Глобальные переменные или свойства(поля) формы задействовать.


Anatoly Podgoretsky   (2007-03-18 13:39:00) [4]

> Roman_S  (18.03.2007 13:27:05)  [5]

Таймер на 100 мсек


RASkov   (2007-03-18 13:39:00) [5]

> Сообщение выводится почему-то 6 раз: 'Получилось!' Что не
> так?

Шесть раз в минуту срабатывает таймер
Поставь интервал по меньше и будет больше 6 раз


RASkov   (2007-03-18 13:34:00) [6]

> Скажите, пожалуйста - как в DateTimePicker показавать/задавать
> только часы и минуты?

DateTimePicker.Format:='hh ч. : mm м.'


Roman_S   (2007-03-18 13:27:00) [7]

Почти получилось так:
procedure TForm2.Timer1Timer(Sender: TObject);
var
 Hour1, Min1, Sec1, MSec1: Word;
 Hour2, Min2, Sec2, MSec2: Word;
begin
DecodeTime(Time, Hour1, Min1, Sec1, MSec1); // Раскодировать текущее время
DecodeTime(DateTimePicker1.Time, Hour2, Min2, Sec2, MSec2);
if (Hour1 = Hour2) and (Min1 = Min2)
then begin
  ShowMessage('Получилось!');
  Timer1.Enabled:=false;
end;
end;

Сообщение выводится почему-то 6 раз: 'Получилось!' Что не так?
Скажите, пожалуйста - как в DateTimePicker показавать/задавать только часы и минуты? И как обойтись без лишних переменных:
var
 Hour1, Min1, Sec1, MSec1: Word;
 Hour2, Min2, Sec2, MSec2: Word;


Ант   (2007-03-18 12:36:00) [8]

ЧТо за бред - сравнить текущее время с тем который ввел пользователь
то есть если ты например даже с точностью до секунды  сравниваешь
то через секунду повторный запуск процедуры уже вернет False
Если же речь идет о сравнении дат, то  |Now-SomeTime|<1


Virgo_Style   (2007-03-18 09:59:00) [9]

1. не проверять на равенство, или проверять с определенной точностью: |Now-SomeTime|<Delta
2. Намек : Время - это дробная часть, а выделить ее - дело несложное.


Roman_S   (2007-03-18 09:40:00) [10]

Просто мне хочется разобраться!
Люди пишут:

1. Время хранится в Double
The integral part of a TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of a TDateTime value is fraction of a 24 hour day that has elapsed.
поэтому точность там по крайней мере миллисекунда. А в TDateTimePicker вводить время можно только до секунды.
Как ни старайся, сравнение с Now будет всегда не равным. Нужно приводить все к одному формату.

2. Сравнивать с now напрямую можно только на > или <. Но нужно еще учитывать, что если
TDateTimePicker.Kind=dtkTime, то пользователем меняется только составляющая времени в TDateTimePicker.Time,
хотя тип поля TDateTime; дата там подставляется из поля TDateTimePicker.Date - ее нужно отслеживать в коде.

Так как-же правильно? Где учитывать дату, милисекунды... где писать Time, где Now?
Как правильно сранивать время?


Loginov Dmitry   (2007-03-18 08:55:00) [11]

> Подскажите - как при Form.Show задавать в нём текущее время?


DateTimePicker.Time := Time;


> как сравнить текущее время с заданным в событии OnTimer


>, <, =, -, +, /, *


Наверх

Титульная страница Поиск, карта сайта Написать письмо