Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.03.2013, 00:33
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Добовление времени для будильника

Написал будильник на делфи.
Опишу саму прогу:
на форму выведено системное время, 3 комбобокса (часы, минуты и секунды). Еще есть edit, в него попадают цифры из комбобоксов (часы:минуты:секунды). И уже с edit`a сравниваем время с системным, если равно то будильник срабатывает...
Всё работает как мне надо, кроме одного! Хотелось бы добавить кнопки быстрого набора, то-есть не копаться в комбобоксах, что бы выставить 5 минут, а сразу нажать на кнопку, которая указала бы в комбобоксе эти самые 5 минут.

Пробовал вот так:
Код:
 var
 dt: TDateTime;
  Hours, Minutes, Seconds, Milliseconds: Word;
begin
dt := GetTime;
  DecodeTime(dt, Hours, Minutes, Seconds, Milliseconds);
cbb1.Text:=IntToStr(Hours); // выводит в первый комбобокс часы
cbb2.Text:=IntToStr(Minutes+5); // выводит минуты и прибавляет 5 минут
end;
Первое время думал что всё сделал правильно, но потом понял что нет. Если время будет к примеру 22:59, этот код нам приплюсует еще 5 минут, это будет 22:64, но как мы все знаем, минут в часах всего 60
Каким образом можно сделать подобные кнопки быстрого набора ? Не обязательно что бы это происходило через комбобоксы!
Посоветуйте что-нибудь. Спасибо.

похвастаться
Ответить с цитированием
  #2  
Старый 25.03.2013, 00:37
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Во-первых, SpinEdit. Во-вторых, if...then. То-есть, если сумма текущих минут и того, что добавляем, больше 59, то вычесть 60. Аналогично с часами (только уже по модулю 24).
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение:
Gareth (25.03.2013)
  #3  
Старый 25.03.2013, 00:47
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от PhoeniX
Во-первых, SpinEdit. Во-вторых, if...then. То-есть, если сумма текущих минут и того, что добавляем, больше 59, то вычесть 60. Аналогично с часами (только уже по модулю 24).
По подробнее можно? Я практически ничего не понял. Я новичок еще в этом. Писать за меня код не прошу, просто объясните подробно пожалуйста.
Код:
if cbb2.ItemIndex >60 then
cbb2.ItemIndex:=(-60);
Так?

Последний раз редактировалось Gareth, 25.03.2013 в 01:12.
Ответить с цитированием
  #4  
Старый 25.03.2013, 01:37
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Замени ComboBox на SpinEdit, и сразу станет проще.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение:
Gareth (25.03.2013)
  #5  
Старый 25.03.2013, 05:44
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от PhoeniX
Замени ComboBox на SpinEdit, и сразу станет проще.

А еще есть модуль DateUtils, в котором есть куча полезный функций работы с датой и временем.
А еще есть такой компонент - TDateTimePicker, который позволяет вводить время...
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Gareth (25.03.2013)
  #6  
Старый 25.03.2013, 07:02
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Оффтоп:
Цитата:
Сообщение от lmikle
А еще есть модуль DateUtils, в котором есть куча полезный функций работы с датой и временем...
Да не, думаю ТСу это будет пока сложно, судя по предыдущим постам, да и похоже, ему надо чтоб раздельно вводились часы, минуты etc.

По теме. УК, кидай прям по совету Феникса, на "похвастаться" три SpinEdit`а (компонента живет на вкладке Samples) и прикрути к ним одно на всех событие OnChange
Код:
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
 with (Sender as TSpinEdit) do
  begin
   if Value = MinValue then Value:= MaxValue - 1;
   if Value = MaxValue then Value:= MinValue + 1;
  end;{with}
end;
так будет проще, единственное что ещё надо, так это у всех задать MinValue = -1, а MaxValue у первого = 24, а у двух других равным 60.
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Gareth (25.03.2013)
  #7  
Старый 25.03.2013, 10:24
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
Печаль

Сделал всё как сказали. Заменил combobox на spinEdit, в каждом spinedit прописал
Код:
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
 with (Sender as TSpinEdit) do
  begin
   if Value = MinValue then Value:= MaxValue - 1;
   if Value = MaxValue then Value:= MinValue + 1;
  end;{with}
end;
В первом spinEdit сделал maxvalue 24, в остальных 60.

На кнопке быстрого набора написал тот же код что и в первый раз
Код:
var
 dt: TDateTime;
  Hours, Minutes, Seconds, Milliseconds: Word;
begin
dt := GetTime;
  DecodeTime(dt, Hours, Minutes, Seconds, Milliseconds);
se1.Text:=IntToStr(Hours); // выводит  часы
se2.Text:=IntToStr(Minutes+55); // выводит минуты и прибавляет 5 минут
if se2.Value and Minutes >60 then

Минуты прибовляются выше 60.
Пробовал на кнопке написать
Код:
    if spinedit2.Value >60 then
  spinedit2.Value:=(-60);
Не получается! Что делаю не так? Может что-то забыл ?
Ответить с цитированием
  #8  
Старый 25.03.2013, 11:28
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Кой-чего нужно добавить
Код:
procedure TForm1.tsl(ds: integer);
var
 hour, min, sec: integer;
begin
 min := ds div 60;
 hour:= min div 60;
 if min > 60 then min:= min mod 60;
 sec := ds mod 60;
 SpinEdit1.Value:=hour;
 SpinEdit2.Value:=min;
 SpinEdit3.Value:=sec;
end;
Для всех кнопок-прибавлялок задать такой клик

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
tsl((SpinEdit1.Value * 3600) + ((SpinEdit2.Value+ (Sender as TButton).Tag) * 60) + SpinEdit3.Value);
end;
и не забыть в Tag этих кнопок записать сколько надо прибавлять, напр. 15 мин Tag=15, 1 час Tag=60
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Gareth (25.03.2013)
  #9  
Старый 25.03.2013, 11:42
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Сделай стрелочный циферблат, типа потянул за минутную стрелку - накручиваются минуты, за часовую - часы.

З.Ы. Скрины не вижу, картинки отключены.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #10  
Старый 25.03.2013, 11:54
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Кой-чего нужно добавить
Код:
procedure TForm1.tsl(ds: integer);
var
 hour, min, sec: integer;
begin
 min := ds div 60;
 hour:= min div 60;
 if min > 60 then min:= min mod 60;
 sec := ds mod 60;
 SpinEdit1.Value:=hour;
 SpinEdit2.Value:=min;
 SpinEdit3.Value:=sec;
end;
Для всех кнопок-прибавлялок задать такой клик
Ругается на
Код:
procedure TForm1.tsl(ds: integer);

[Error] Unit1.pas(178): Undeclared identifier: 'tsl'
[Error] Unit1.pas(182): Undeclared identifier: 'ds'
[Error] Unit1.pas(186): Undeclared identifier: 'SpinEdit1'
[Error] Unit1.pas(187): Undeclared identifier: 'SpinEdit2'
[Error] Unit1.pas(188): Undeclared identifier: 'SpinEdit3'
[Error] Unit1.pas(205): Undeclared identifier: 'tsl'
[Error] Unit1.pas(205): ')' expected but identifier 'Value' found
[Error] Unit1.pas(205): Statement expected, but expression of type 'Integer' found
[Fatal Error] Project1.dpr(6): Could not compile used unit 'Unit1.pas'
Ответить с цитированием
  #11  
Старый 25.03.2013, 12:03
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Gareth
Ругается на
Код:
procedure TForm1.tsl(ds: integer);
...
Прописать её в секции type нужно.
Ответить с цитированием
  #12  
Старый 25.03.2013, 12:28
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну так че на счет круглого циферблата? Совсем слабО?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #13  
Старый 25.03.2013, 12:39
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Ну так че на счет круглого циферблата? Совсем слабО?
Прикалываешься ?
Ответить с цитированием
  #14  
Старый 25.03.2013, 12:48
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну так скопипиздить ума большого не надо, а вот самому наколбасить?
Вроде ж все проще простого.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #15  
Старый 25.03.2013, 12:55
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Оффтоп:
Цитата:
Сообщение от M.A.D.M.A.N.
...а вот самому наколбасить?Вроде ж все проще простого.
Ключевое слово "вроде" :-)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:11.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025