Пятница - 29.03.2024 - 09:08:21
8872
0
0
Создание собственного таймера.
Необходимость наличия таймера в компьютере продиктована самой спецификой. И правда, что это за компьютер, если на нем нельзя выполнить такие необходимые операции, как выключение в заданное время, функция сна, будильника. Любой соверменный бытовой прибор обладает этими функциями, а большинство компьютеров так и не снабжены такими элементарными полезностями. Из опыта могу сказать, что это вещь незаменимая, конечно, если вы не «чайник»Немного отступлю от темы, и объясню кто такой «чайник», потому что этим термином раскидываются без всякого понимания, пытаясь оскорбить, употребляя его. Лично у меня язык не повернется назвать «чайником» человека, который впервые сел за компьютер. Такой не «чайник», а начинающий. А вот если, человек, который год и больше проработал за компьютером и не может произвести элементарную настройку компьютера, организовать удобный рабочий стол, привести в порядок свои файлы, и даже так и не научился пользоваться «Nero»- вот такой безпорно «чайник»!!!
Но вернемся к нашему таймеру.
Передо мною стояла задача сойдать независимый таймер, такой, чтобы я мог полностью им управлять. Используя стандартные функции, этого, конечно, сделать невозможно. Ниже можно увидеть на рисунке внешний вид моего таймера. И еще, он должен вести отсчет в обратном направлении.
Здесь я не буду описывать таких елементарных действий, как создание формы, как поместить на форму компоненты и т.д. Я опишу только функцию таймера, а как ее применять, это уже дело вашей фантазии.
Последовательность наших действий:
- Создаем форму.
- Добавляем на форму компонент TTimer и устанавливаем его свойство Enabled в false; еще добавляем TLabel и TButton.
- Описываем наши действия и функции.
//1.Объявление в файле .срр #include <vcl.h> #pragma hdrstop TFormMiniProgrms *FormMiniProgrms; int hh=0,m=0,mm=0,s=0,ss=0; //2.Код в обработчике таймера void __fastcall TForm1::Timer1Timer(TObject *Sender) { ss--; if(ss<0) {ss=9; s--; if(s<0) {s=5; mm--;} } if(mm<0) {mm=9; m--; if(m<0) {m=5; hh--;} } if(hh<0) {hh=0;m=0;mm=0;s=0;ss=0;} Label1->Caption="0"+String(hh)+":"+String(m)+String(mm)+ ":"+String(s)+String(ss); } //3.При нажатии на кнопку, делаем некоторые установки void __fastcall TForm1::Button1Click(TObject *Sender) { //Для тестирования, устанавливаем одну минуту Label1->Caption="00:01:00"; //устанавливаем начальное значение переменных hh=StrToInt(Label1->Caption.SubString(2,1)); m=StrToInt(Label1->Caption.SubString(4,1)); mm=StrToInt(Label1->Caption.SubString(5,1)); s=5; ss=9; mm--; //запускаем таймер Timer1->Enabled=1; }
- Доработать функцию и добавить миллисекунды.
- Расширить функцию на предмет отсчета как вперед, так и назад (здесь только назад).
Таймер не был бы полностью функциональным, если бы не было возможности определить колличество секунд. Для этой цели, я написал функцию, которая преобразует строковое значение таймера в число секунд.
int __fastcall MyTimeToIntHHNN(String time) { String sh,shh,sm,smm; int h,m; sh=time.SubString(1,1).Trim(); shh=time.SubString(2,1).Trim(); sm=time.SubString(4,1).Trim(); smm=time.SubString(5,1).Trim(); if(sh!="0") {sh+=shh;} else {sh=shh;} if(sm!="0") {sm+=smm;} else {sm=smm;} h=StrToInt(sh)*3600; m=StrToInt(sm)*60; return h+m; }
ShowMessage(StrToInt(MyTimeToIntHHNN("00:01:00"))+" сек");
выведет на экран "60 сек".
... все. Пользуйтесь, пишите.
Друзья сайта
Новости сайта
(06.03.2010)
Полностью обновлены дизайн и структура сайта
Полностью обновлены дизайн и структура сайта