![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать сообщение [D7, XP]
AlekseyB © (2008-09-17 08:41:00)Подскажите плиз...., как сделать так чтобы у меня выскакивало сообщение в нужный момент, т.е. надо сделать единожды, ежедневно, ежемесячно, ежегодно !!! Единожды и ежедневно впринципе вроде получилось, а вот как сделать ежемесячно и ежегодно ? Заранее спасибо !!!!
Правильный$Вася (2008-09-17 12:01:00) [1]
> переставляем системную дату
вот интересно порассуждать, какая же дельта во времени будет...
минута=год...
brother (2008-09-17 11:41:00) [2]> долго ждать придется, чтобы протестировать
комп- машина времени ;)
переставляем системную дату, и мы в прошлом/настоящем/будущем)
KilkennyCat (2008-09-17 11:39:00) [3]главное - не выключить нечаянно комп.
clickmaker (2008-09-17 11:26:00) [4]> ежегодно ?
долго ждать придется, чтобы протестировать
Правильный$Вася (2008-09-17 10:55:00) [5]
> как сделать ежемесячно и ежегодно
а теперь объясни, что ты понимаешь под этим
ежемесячно - это раз в месяц, но когда именно?
Vlad Oshin (2008-09-17 10:51:00) [6]Время - суть дробное машинной число
Дробные машинные числа сравниваются не наравенство, а на попадение в интервал.
a=b ~ (a-b)<0.001
Dennis I. Komarov (2008-09-17 10:40:00) [7]Сделай чтоб выскакивало сообщение и запускай его через Scheduler Windows - и тебя никто не убъет за постоянно висящий в память никому не нужный процесс...
han_malign (2008-09-17 10:28:00) [8]
> В таймере интервалами в час
или TApplication.OnIdle
> далее сравниваем это с нашей записью
- проверяем, что нужная отсечка(и) времени поподает в полуинтервал (LastCheck, Now]
- если попало - выполняем событие(я), изменяем расписание в соответсвии с планом
- запоминаем время последней проверки(LastDayTime:= Now (запоминаем в файл/реестр на случай перезапука))
З.Ы. Если делать в OnIdle, чтобы не загружать процессор - необходимо "прореживать" проверки расписания - проверкой времени ближайшего запланированого события(Now >= MinEventTime), которое может быть временем реально запланированного события, шагом(MinEventTime = LastCheck+step) или их комбинацией...
brother (2008-09-17 08:50:00) [9]> Единожды и ежедневно впринципе вроде получилось,
видимо кривой алгоритм, раз ежемесячно и ежегодно не получается ;)
Алгоритм: В таймере интервалами в час(может даже больше) делаем проверку текущей даты, месяца, года; далее сравниваем это с нашей записью, переменной или массивом в которых хранятся указанные дни месяцяца и года для сработки показа сообщений!
Если совпало - показываем сообщение...