Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.07.2017
Сообщений: 65
1

Запрет после 24 часов (сутки)

06.08.2017, 21:36. Показов 666. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем вопрос такой как сделать так чтобы при нажатии кнопки1 начинался отчет 24ех часов а при нажатии другой кнопки2 выскакивало сообщение (после прохождения 24ех часов)?? То есть могу на кнопку2 нажимать сколько угодно раз как только пройдет 24 часа с момента нажатия кнопки1 то при нажатии кнопки2 будет сообщение что прошли сутки. Примерно представляю как это сделать подскажите как реализовать до конца.

При нажатии кнопки1 могу записать ту дату (на момент нажатия кнопки) в ini файл, при нажатии кнопки2 могу прочитать дату из ini файла, вот помогите с моментом подсчета и сравнения самих 24ех часов при чтении из файла тут я чет не могу додумать как это реализовать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.08.2017, 21:36
Ответы с готовыми решениями:

Сокращение сна до 4 часов в сутки
1. Перед сном не есть, не курить хотя бы час-полтора. 2. Спать на жестком (тонкий матрас на...

Определить, сколько часов требуется спать в сутки
Из передачи “Здоровье” Аня узнала, что рекомендуется спать хотя бы A часов в сутки, но пересыпать...

Оправдано ли покупать беспроводную мышь, если работа за ПК составляет 12 часов в сутки
Посоветуйте нормальную мышь до 1500р. Хотел беспроводную, потом передумал, с проводом надежнее, но...

Как изменятся показания часов за сутки работы при температуре 0oС?
Как изменятся показания часов за сутки работы при температуре 0oС, если они выверены при...

9
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
06.08.2017, 22:36 2
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Unit
      Unit1;
 
Interface
 
Uses
      Windows,
      Messages,
      SysUtils,
      Variants,
      Classes,
      Graphics,
      Controls,
      Forms,
      Dialogs,
      StdCtrls;
 
Type
      TForm1 = Class(TForm)
            Button1: TButton;
            Button2: TButton;
            Procedure FormCreate(Sender: TObject);
            Procedure Button1Click(Sender: TObject);
            Procedure Button2Click(Sender: TObject);
      Private
            ReqDate: TDateTime;
      Public
      End;
 
Var
      Form1: TForm1;
 
Implementation
 
Uses
      DateUtils;
 
{$R *.dfm}
 
Procedure TForm1.FormCreate(Sender: TObject);
Begin
ReqDate:=Now();
End;
 
Procedure TForm1.Button1Click(Sender: TObject);
Begin
With (Sender As TButton) Do
      Begin
      Enabled:=False;
      ReqDate:=IncHour(Now(), 24);
      End;
End;
 
Procedure TForm1.Button2Click(Sender: TObject);
Begin
If (Now()<ReqDate) Then
      ShowMessage('Действие не доступно!'#13#10'Осталось до активации: '+FormatDateTime('hh:mm:ss', ReqDate-Now()))
Else
      Begin
      // ...
      End;
End;
 
End.
0
0 / 0 / 0
Регистрация: 27.07.2017
Сообщений: 65
07.08.2017, 00:01  [ТС] 3
Привет) Спасибо за ответ! Верно я понимаю что этот код будет работать только тогда когда запущенно приложение? Я извиняюсь что не указал в вопросе то что мне надо чтобы код работал даже если компьютер будет выключен все эти 24 часа. Я вот примерно надумал как сделать: просто при нажатии кнопки1 будет сохранятся (время и дата при нажатии) + к нему 24 часа в ini файл, потом при нажатии кнопки2 будет сверятся дата и время из ini с настоящим датой и временем при нажатии кнопки2, если время и дата больше или равно то тогда сообщение что время вышло а если меньше то продолжаю код на кнопке. Вот как то так надумал, верно я думаю будет так работать? если переменную настоящего времени и переменную времени из ini буду сравнивать при нажатии кнопки2? Подскажите верно или нет а код попробую сам написать)

Добавлено через 57 минут
Так вроде моя задумка работает. Вот только предупреждение выскакивает

Variable 'D' might not have been initialized
D это переменная которую я задал для сохранения даты и времени в ini файл

В процедуре сохранения все нормально с этой переменной а вот в процедуре чтения выскакивает предупреждение

Оно предупреждает что объявлена переменная но не используется или как то по другому?

Подскажите как побороть это предупреждение?
0
Модератор
9260 / 6038 / 2379
Регистрация: 21.01.2014
Сообщений: 25,802
Записей в блоге: 3
07.08.2017, 08:16 4
Это предупреждение Вам говорит, что у Вас переменная объявлена, но не инициализирована. Победить очень просто:
первой строкой в Вашем обработчике:
Delphi
1
D := Now;
0
5785 / 4527 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
07.08.2017, 08:26 5
))
думаю, не все так просто.
покажите кот)
0
Айлурофил
441 / 375 / 107
Регистрация: 27.05.2017
Сообщений: 2,155
Записей в блоге: 1
07.08.2017, 09:04 6
Цитата Сообщение от ДневнойДоширак Посмотреть сообщение
При нажатии кнопки1 могу записать ту дату (на момент нажатия кнопки) в ini файл, при нажатии кнопки2 могу прочитать дату из ini файла, вот помогите с моментом подсчета и сравнения самих 24ех часов при чтении из файла тут я чет не могу додумать как это реализовать.
Если обе даты, точнее дату/время (записанную и текущую) преобразовать в TDateTime - d1 и d2, то 24 часа пройдет, когда d2-d1>1
0
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
07.08.2017, 12:28 7
Вы же сказали что умеете записать дату в ini файл. Ну так просто добавьте этот ваш код в мой пример. Внутри FormCreate вместо задания текущего даты/времени получайте ваше сохранённое, и всё.

Добавлено через 2 минуты
Цитата Сообщение от ДневнойДоширак Посмотреть сообщение
этот код будет работать только тогда когда запущенно приложение
А когда "приложение не запущено" вы как будете нажимать в нём кнопки? %))

Добавлено через 8 минут
Вот смотрите:
Delphi
1
2
3
4
Procedure TForm1.FormCreate(Sender: TObject);
Begin
ReqDate:=Now();
End;
Это инициализация переменной-поля-класса. Можете поменять на своё получение из INI.
Delphi
1
2
3
4
5
6
7
8
Procedure TForm1.Button1Click(Sender: TObject);
Begin
With (Sender As TButton) Do
      Begin
      Enabled:=False;
      ReqDate:=IncHour(Now(), 24);
      End;
End;
А тут я делаю кнопку (которую нажали) неактивной и задаю время как "увеличить `сейчас` на 24 часа". И следующей строкой вставляйте ваше сохранение даты в INI.
0
0 / 0 / 0
Регистрация: 27.07.2017
Сообщений: 65
07.08.2017, 16:16  [ТС] 8
D := Now; Так сделал при записи в ini.

Цитата Сообщение от Massaraksh7 Посмотреть сообщение
Если обе даты, точнее дату/время (записанную и текущую) преобразовать в TDateTime - d1 и d2, то 24 часа пройдет, когда d2-d1>1
По сути я так и сделал.

А в процедуре чтения предупреждение было на эту строчку

Delphi
1
UD := IniFile.ReadDateTime('Date', 'udate', D);
Написал перед чтением вот так

D := 0;

И перестало ругаться, но не уверен правильно так делать или нет.

А так все работает.
0
Модератор
9260 / 6038 / 2379
Регистрация: 21.01.2014
Сообщений: 25,802
Записей в блоге: 3
07.08.2017, 17:13 9
Цитата Сообщение от ДневнойДоширак Посмотреть сообщение
но не уверен правильно так делать или нет
Ну а почему не правильно-то.. Тип TDateTime - по сути своей есть double, поэтому Вы объявили переменную, инициализировали ее нулем и ура (главное: дать ей какое-то изначальное значение): далее просто присваиваем ей какое-то другое значение и используем...
1
0 / 0 / 0
Регистрация: 27.07.2017
Сообщений: 65
07.08.2017, 17:44  [ТС] 10
D1973, Спасибо теперь буду знать, вы развеяли мои сомнения, а то я переживал что могут ошибки в дальнейшем из-за этого посыпаться какие нибудь.
0
07.08.2017, 17:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2017, 17:44
Помогаю со студенческими работами здесь

Показывать popup только 1 раз в сутки или 1 раз в несколько часов
Здравствуйте, помогите разобраться Как сделать так, чтобы popup открывался только один раз в сутки...

После перезагрузки материнская плата стартует только через сутки
Суть проблемы в следующем. Железо: Мать ASUS a8n5x, процессор - athlon 3000 Компьютер стартует...

Путник двигался t1 часов со скоростью v1, затем t2 часов- со скоростью v2 и t3 часов со скоростью v3. За какое время он одолел первую половину пути
Путник двигался t1 часов со скоростью v1, затем t2 часов- со скоростью v2 и t3 часов со скоростью...

Путник двигался t1 часов со скоростью v1, затем t2 часов - со скоростью v2 и t3 часов – со скоростью v3. За какое время он одолел половину пути? в с++
Путник двигался t1 часов со скоростью v1, затем t2 часов - со скоростью v2 и t3 часов – со...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru