Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 221

/ вопрос открыт /

Здравствуйте, эксперты!
Пожалуйста помогите с программкой! Очень нужна помощь! Я тут для себя делаю пограммку обратного отсчёта. То есть хочу сделать сделать таймер чтоб мог отсчитывать не только минуты и секунды, но и часы.
Так то всё работает, но проблема с отсчётом. Как правильно делать такую программу?

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. var chas:integer;
  2. min:integer;
  3. Sec:integer;
  4.  
  5.  
  6.  
  7. var buf:string;
  8. begin
  9. buf:= IntToStr(chas) + ':' + IntToStr(min) + ':' + IntToStr(sec);
  10. Form1.StaticText3.Caption:=buf;
  11.  
  12.  
  13. end;
  14.  
  15. procedure TForm1.N4Click(Sender: TObject);
  16. begin
  17.  
  18. end;
  19.  
  20. procedure TForm1.N3Click(Sender: TObject);
  21. begin
  22.  
  23. end;
  24.  
  25. procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
  26.  
  27. begin
  28. If (UpDown1.Position = 0) or (UpDown1.Position = 5) or (UpDown1.Position = 6) or
  29. (UpDown1.Position = 7) or (UpDown1.Position = 8) or (UpDown1.Position = 9) or
  30. (UpDown1.Position = 10) or (UpDown1.Position = 11) or (UpDown1.Position = 12) or
  31. (UpDown1.Position = 13) or (UpDown1.Position = 14) or (UpDown1.Position = 15) or
  32. (UpDown1.Position = 16) or (UpDown1.Position = 17) or (UpDown1.Position = 18) or
  33. (UpDown1.Position = 19) or (UpDown1.Position = 20)
  34.  
  35.  
  36. If (UpDown1.Position = 1) or (UpDown1.Position = 21)
  37.  
  38.  
  39. If (UpDown1.Position = 2) or (UpDown1.Position = 3) or (UpDown1.Position = 4) or
  40. (UpDown1.Position = 22) or (UpDown1.Position = 23) or (UpDown1.Position = 24)
  41.  
  42.  
  43.  
  44.  
  45. end;
  46.  
  47. procedure TForm1.FormCreate(Sender: TObject);
  48. begin
  49.  
  50. Button1.Enabled:=True;
  51. Button2.Enabled:=False;
  52. end;
  53.  
  54.  
  55. procedure TForm1.Button1Click(Sender: TObject);
  56. begin
  57. sec:=UpDown3.Position;
  58. min:=UpDown2.Position;
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66. Button1.Enabled:=False;
  67. Button2.Enabled:=True;
  68. Edit1.Enabled:=False;
  69. Edit2.Enabled:=False;
  70. Edit3.Enabled:=False;
  71.  
  72. end;
  73.  
  74.  
  75. begin
  76. sec:=sec-1;
  77.  
  78.  
  79. If (sec=0) and (min=0) and(chas>0) then
  80. begin
  81. chas:=chas-1;
  82. min:=59;
  83. sec:=60;
  84. end;
  85.  
  86. If (sec=0) and (min>0) and (chas=0) then
  87. begin
  88. min:=min-1;
  89. sec:=60;
  90. end;
  91.  
  92. If (sec=0) and (min>0) and (chas>0) then
  93. begin
  94. min:=min-1;
  95. chas:=chas-1;
  96. sec:=60;
  97. end;
  98.  
  99.  
  100. If (chas=0) and (min=0) and (sec=0) then
  101. begin
  102. Timer1.Enabled:=false;
  103. Button1.Enabled:=True;
  104. Button2.Enabled:=False;
  105. Edit1.Enabled:=True;
  106. Edit2.Enabled:=True;
  107. Edit3.Enabled:=True;
  108.  
  109. end;
  110.  
  111.  
  112.  
  113. end;
  114.  
  115. procedure TForm1.Button2Click(Sender: TObject);
  116. begin
  117. Button1.Enabled:=True;
  118. Button2.Enabled:=False;
  119. Timer1.Enabled:=False;
  120. Edit1.Enabled:=True;
  121. Edit2.Enabled:=True;
  122. Edit3.Enabled:=True;
  123.  
  124.  
  125. end;
  126.  
  127.  
  128. procedure TForm1.UpDown2Click(Sender: TObject; Button: TUDBtnType);
  129. begin
  130. If (UpDown2.Position = 0) or (UpDown2.Position = 5) or (UpDown2.Position = 6) or
  131. (UpDown2.Position = 7) or (UpDown2.Position = 8) or (UpDown2.Position = 9) or
  132. (UpDown2.Position = 10) or (UpDown2.Position = 11) or (UpDown2.Position = 12) or
  133. (UpDown2.Position = 13) or (UpDown2.Position = 14) or (UpDown2.Position = 15) or
  134. (UpDown2.Position = 16) or (UpDown2.Position = 17) or (UpDown2.Position = 18) or
  135. (UpDown2.Position = 19) or (UpDown2.Position = 20) or (UpDown2.Position = 25) or
  136. (UpDown2.Position = 26) or (UpDown2.Position = 27) or (UpDown2.Position = 28) or
  137. (UpDown2.Position = 29) or (UpDown2.Position = 30) or (UpDown2.Position = 35) or
  138. (UpDown2.Position = 36) or (UpDown2.Position = 37) or (UpDown2.Position = 38) or
  139. (UpDown2.Position = 39) or (UpDown2.Position = 40) or (UpDown2.Position = 45) or
  140. (UpDown2.Position = 46) or (UpDown2.Position = 47) or (UpDown2.Position = 48) or
  141. (UpDown2.Position = 49) or (UpDown2.Position = 50) or (UpDown2.Position = 55) or
  142. (UpDown2.Position = 56) or (UpDown2.Position = 57) or (UpDown2.Position = 58) or
  143. (UpDown2.Position = 59) or (UpDown2.Position = 60)
  144.  
  145.  
  146. If (UpDown2.Position = 1) or (UpDown2.Position = 21) or (UpDown2.Position = 31) or
  147. (UpDown2.Position = 41) or (UpDown2.Position = 51)
  148.  
  149.  
  150. If (UpDown2.Position = 2) or (UpDown2.Position = 22) or (UpDown2.Position = 23) or
  151. (UpDown2.Position = 24) or (UpDown2.Position = 32) or (UpDown2.Position = 33) or
  152. (UpDown2.Position = 34) or (UpDown2.Position = 42) or (UpDown2.Position = 43) or
  153. (UpDown2.Position = 44) or (UpDown2.Position = 52) or (UpDown2.Position = 53) or
  154. (UpDown2.Position = 54)
  155.  
  156.  
  157.  
  158.  
  159. end;
  160.  
  161. procedure TForm1.UpDown3Click(Sender: TObject; Button: TUDBtnType);
  162. begin
  163. If (UpDown3.Position = 0) or (UpDown3.Position = 5) or (UpDown3.Position = 6) or
  164. (UpDown3.Position = 7) or (UpDown3.Position = 8) or (UpDown3.Position = 9) or
  165. (UpDown3.Position = 10) or (UpDown3.Position = 11) or (UpDown3.Position = 12) or
  166. (UpDown3.Position = 13) or (UpDown3.Position = 14) or (UpDown3.Position = 15) or
  167. (UpDown3.Position = 16) or (UpDown3.Position = 17) or (UpDown3.Position = 18) or
  168. (UpDown3.Position = 19) or (UpDown3.Position = 20) or (UpDown3.Position = 25) or
  169. (UpDown3.Position = 26) or (UpDown3.Position = 27) or (UpDown3.Position = 28) or
  170. (UpDown3.Position = 29) or (UpDown3.Position = 30) or (UpDown3.Position = 35) or
  171. (UpDown3.Position = 36) or (UpDown3.Position = 37) or (UpDown3.Position = 38) or
  172. (UpDown3.Position = 39) or (UpDown3.Position = 40) or (UpDown3.Position = 45) or
  173. (UpDown3.Position = 46) or (UpDown3.Position = 47) or (UpDown3.Position = 48) or
  174. (UpDown3.Position = 49) or (UpDown3.Position = 50) or (UpDown3.Position = 55) or
  175. (UpDown3.Position = 56) or (UpDown3.Position = 57) or (UpDown3.Position = 58) or
  176. (UpDown3.Position = 59) or (UpDown3.Position = 60)
  177.  
  178.  
  179. If (UpDown3.Position = 1) or (UpDown3.Position = 21) or (UpDown3.Position = 31) or
  180. (UpDown3.Position = 41) or (UpDown3.Position = 51)
  181.  
  182.  
  183. If (UpDown3.Position = 2) or (UpDown3.Position = 22) or (UpDown3.Position = 23) or
  184. (UpDown3.Position = 24) or (UpDown3.Position = 32) or (UpDown3.Position = 33) or
  185. (UpDown3.Position = 34) or (UpDown3.Position = 42) or (UpDown3.Position = 43) or
  186. (UpDown3.Position = 44) or (UpDown3.Position = 52) or (UpDown3.Position = 53) or
  187. (UpDown3.Position = 54)
  188.  
  189.  
  190.  
  191.  
  192. end;
  193.  
  194. end.


Andrew_Cyber Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Andrew_Cyber (статус: Посетитель)
Вопрос отправлен: 24 мая 2010, 18:28
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 9; последнее сообщение — 25 мая 2010, 21:10; участников в обсуждении: 4.
lx

lx (статус: Посетитель), 24 мая 2010, 19:03 [#1]:

жесть xD
min@y™

min@y™ (статус: Доктор наук), 24 мая 2010, 20:57 [#2]:

Как дочитал до...
If (UpDown1.Position = 0) or (UpDown1.Position = 5) or  (UpDown1.Position = 6) or
   (UpDown1.Position = 7) or (UpDown1.Position = 8) or (UpDown1.Position = 9) or
   (UpDown1.Position = 10) or (UpDown1.Position = 11) or (UpDown1.Position = 12) or
   (UpDown1.Position = 13) or  (UpDown1.Position = 14) or (UpDown1.Position = 15) or
   (UpDown1.Position = 16) or (UpDown1.Position = 17) or (UpDown1.Position = 18) or
   (UpDown1.Position = 19) or (UpDown1.Position = 20) 
then StaticText1.Caption:='часов';
 
If (UpDown1.Position = 1) or (UpDown1.Position = 21)
then StaticText1.Caption:='час';
 
If (UpDown1.Position = 2) or (UpDown1.Position = 3) or (UpDown1.Position = 4) or
   (UpDown1.Position = 22) or (UpDown1.Position = 23) or (UpDown1.Position = 24)
then StaticText1.Caption:='часа';
...то дальше читать не стал, ибо боюсь необратимых повреждений своей психики.
В паскале есть такая хренотень, называется оператор "case". Благодаря этой хренотени этот кошмар можно заменить на это:
case UpDown1.Position of
  1, 21:        StaticText1.Caption:='час';
  2..4, 22, 23: StaticText1.Caption:='часа';
else            StaticText1.Caption:='часов';
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Andrew_Cyber

Andrew_Cyber (статус: Посетитель), 25 мая 2010, 07:24 [#3]:

min@y™: ну это не суть важно. главное чтоб часы отсчитывал.
min@y™

min@y™ (статус: Доктор наук), 25 мая 2010, 08:14 [#4]:

Цитата (Andrew_Cyber):

ну это не суть важно. главное чтоб часы отсчитывал.

Я вижу у тебя там 3 переменных, храняших часы, минуты и секунды. Выкинь их нафиг, вместо них заведи одну переменную - кол-во секунд, оставшихся до конца отсчёта, и по таймеру декрементируй. А чтобы вывести на экран кол-во оставшихся часов/минут/секунд, вычисляй их из общего кол-ва оставшихся секунд.
  Hours:= TotalSeconds div 3600;
  Minutes:= (TotalSeconds mod 3600) div 60;
  Seconds:= TotalSeconds mod 60;
И убери эти жуткие if ... or ... or ... or ... then ... Это ж кашмар и ужос!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Andrew_Cyber

Andrew_Cyber (статус: Посетитель), 25 мая 2010, 17:35 [#5]:

спасибо за помощь
min@y™

min@y™ (статус: Доктор наук), 25 мая 2010, 17:50 [#6]:

Цитата (Andrew_Cyber):

спасибо за помощь

Что, помогло?
Покажи, что получилось.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Andrew_Cyber

Andrew_Cyber (статус: Посетитель), 25 мая 2010, 19:52 [#7]:

http://linkme.ufanet.ru/images/c7b206ffbf363d1eb1aa5b2e45e7d35b.png
Вадим К

Вадим К (статус: Академик), 25 мая 2010, 20:52 [#8]:

додуматься - сорцы в картинке выложить...
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 25 мая 2010, 21:10 [#9]:

Цитата (Вадим К):

додуматься - сорцы в картинке выложить...

Сначала он выложил их тут текстом. Получилось хуже. Русские комментарии превратились в ХЗЧ. Наверное, при копировании раскладка была английской.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:01
Выполнено за 0.03 сек.