Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2012, 14:57   #1
Fiesko
Пользователь
 
Регистрация: 09.06.2012
Сообщений: 24
По умолчанию Интервал между действием

Всем доброго времени суток.
Нужно сделать следующее:
Чтобы кнопку(Button), можно было нажимать через определенный промежуток времени, не зависимо от того, включена программа или нет.
Например нажал на кнопку, текст отправился, а кнопка заблокировалась на часа 3. Через 3 часа, кнопка опять доступна и ее можно нажать.
Как это можно реализовать?
Fiesko вне форума Ответить с цитированием
Старый 26.09.2012, 14:59   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Записываете дату/время нажатия кнопки в реестр (или в файл – на ваш выбор), а после по таймеру отслеживаете, прошло ли 3 часа с момента нажатия или нет (текущее время сравниваете с записанным в файле). Если прошло, то в свойство Enabled кнопки пишете True. Если нет - False
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 26.09.2012, 15:48   #3
Fiesko
Пользователь
 
Регистрация: 09.06.2012
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
Записываете дату/время нажатия кнопки в реестр (или в файл – на ваш выбор), а после по таймеру отслеживаете, прошло ли 3 часа с момента нажатия или нет (текущее время сравниваете с записанным в файле). Если прошло, то в свойство Enabled кнопки пишете True. Если нет - False
Не могу сообразить. Измеряю время по часам.
При нажатии на кнопку, в реестр добавляется время(В часах, без секунд и минут), когда была нажата кнопка. Стоит таймер, который вычитает время из реестра(Добавленным временем, когда была нажата кнопка) с временем в данный момент. Если это время <=3, то Button1.Enabled:=true если нет то false. Это все хорошо, но в таймере стоит промежуток, то есть если в это время пользователь не успеет нажать кнопку, то она заблокируется. Что не так?
Fiesko вне форума Ответить с цитированием
Старый 26.09.2012, 16:05   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, у вас же прямое нарушение вашей же логики работы приложения:
Цитата:
Через 3 часа, кнопка опять доступна и ее можно нажать.
Цитата:
Если это время <=3, то Button1.Enabled:=true
очевидно, что если три часа не прошло, то кнопка должна быть НЕДОСТУПНА:
>это время <=3, то Button1.Enabled:=false

не так?..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.09.2012, 16:10   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
Измеряю время по часам В часах, без секунд и минут
Это как?
1. Если я нажал кнопку в 3:01 или в 3:59, то все равно запишется 3 часа?
2. Если я нажал кнопку сегодня в 3:00, то завтра в 3:01 она будет заблокирована?

Пиши точное время с датой, например
Код:
FormatDateTime('dd.mm.yyyy hh:nn:ss',Now);
И, надеюсь, ты не проверяешь реестр по таймеру каждые 100 миллисекунд?
_SERGEYX_ вне форума Ответить с цитированием
Старый 26.09.2012, 16:48   #6
Fiesko
Пользователь
 
Регистрация: 09.06.2012
Сообщений: 24
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Это как?
1. Если я нажал кнопку в 3:01 или в 3:59, то все равно запишется 3 часа?
2. Если я нажал кнопку сегодня в 3:00, то завтра в 3:01 она будет заблокирована?

Пиши точное время с датой, например
Код:
FormatDateTime('dd.mm.yyyy hh:nn:ss',Now);
И, надеюсь, ты не проверяешь реестр по таймеру каждые 100 миллисекунд?
Так вот я и не понял как сравнивать время.
Мне просто надо сделать так:
1. Зашел в программу, нажал на кнопку.
2. Пошел отсчет 3 часа и кнопка блокируется до истечения 3ех часов даже если программа выключена.
3. 3 Часа прошло,кнопка снова стала доступной. И т.д.

И еще не понял, как сделать так, чтобы таймер не блокировал кнопку если ты ее не нажал. Ведь если зайти в программу отсчет уже пойдет.
И еще, как сравнить дату добавления сообщения и дату сейчас. (26.09.2012 16:47:34 с другой такой же датой).

Последний раз редактировалось Fiesko; 26.09.2012 в 16:52.
Fiesko вне форума Ответить с цитированием
Старый 26.09.2012, 17:00   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
FormatDateTime('dd.mm.yyyy hh:nn:ss',Now)
тут лучше проверять на условие больше-меньше, ибо в секунду программа может не попасть. Не REALTIME, какой-нить процесс себе все отобрал, к примеру, в этот момент идет конвертация видео с максимальным приоритетом.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 27.09.2012, 00:08   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

кстати, я бы вообще не пользовался переводом TDateTime в строковое представление. На самом деле TDateTime == Double.
Можно прямо Double и сохранять. А потом считавать, да и сравнивать легче будет..
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интервал между нажатиями. werser Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 03.12.2010 17:22
интервал между датами andrenisimus БД в Delphi 8 28.10.2010 14:05
Интервал между датами в структуре! Telec Общие вопросы C/C++ 0 22.03.2010 20:55