Как сделать часы в делфи со стрелками
Среда Delphi позволяет достаточно легко работать со временем и датами. Кроме того, с помощью компонента Timer можно периодически вызывать события через равные промежутки времени (например, через 1 сек.).
Задачи урока
- Работа с компонентом таймера —Timer.
- Определение текущего времени.
- Перевод времени в строку.
- Вычисление разницы во времени между двумя событиями.
Выполнение упражнения
1. Дизайн приложения
1. Расположите компоненты, как показано на рисунке 2а и измените значения их свойств согласно рисунку 2б. У меток label2 и Label4 очищено свойство Caption. Также у них жирный шрифт размером 24 пункта.
2. Вставка таймера
1. Для того чтобы часы шли, программа должна каждую секунду определять текущее время. В этом нам поможет невизуальный компонент Timer , расположенный на вкладке System. Поместите таймер на форму (рисунок 3).
2. Измените имена компонентов следующим образом:
Имя, которое было
Имя, на которое
необходимо изменить
3. Обработка события от таймера
1. Выберите таймер и посмотрите на его свойства и события в окне Инспектор объектов (рисунок 4). Их не так уж и много.
Первое свойство — Enabled. Оно имеет логический тип. Если Enabled = True, то таймер работает, если False, то не работает.
Второе свойство — Interval. Задаёт интервал между генерацией события таймера OnTimer (рисунок 4б) в миллисекундах. По умолчанию это свойство равно 1000, т. е. интервал равен одной секунде. В данном случае нас это вполне устраивает, поэтому менять интервал не будем.
Что это означает?
- Now — это системная константа, которая возвращает текущее время и дату в виде значения типа TDateTime.
- TimeToStr — функция, которая переводит тип TDateTime в тип String, причём принимает во внимание только время, а дату игнорирует.
3. Теперь необходимо вычислить и отобразить время, в течение которого работает наше приложение. Для этого необходимо запомнить время старта приложения и занести его в переменную типа TDateTime. Назовём её StartTime. Затем при каждом срабатывании таймера будем вычислять и отображать разность между текущим временем и временем, содержащимся в переменной StartTime.
Для этого объявите глобальную переменную StartTime типа TDateTime (выделено жёлтым цветом):
4. Допишите обработчик события таймера OnTimer следующим образом:
Чтобы вычислить разность между двумя временными интервалами (либо между датами), достаточно просто найти их разность.
5. Обработайте событие OnCreate для формы следующим образом:
Описание кода дано в комментариях.
4. Переключение режимов работы таймера
Теперь вы всегда будете знать, сколько сейчас времени!
5. Коротко о главном
- С помощью компонента Timer можно вызывать периодические события OnTimer через равные промежутки времени.
- Промежуток времени таймера задаётся свойством Interval.
- Включить/выключить таймер можно с помощью логического свойства Enabled.
- Now — это системная константа в среде Delphi, которая возвращает текущее время и дату в виде значения типа TDateTime.
- Чтобы вычислить разность между двумя временными интервалами (либо между датами), достаточно просто вычесть одно значение из другого.
6. Выполнение заданий
Задания I уровня сложности
8. Напишите приложение, в котором происходит отсчёт времени, оставшегося до ближайшего Нового года, а также сколько времени прошло от предыдущего. Время отсчитывается в часах.
Задания II уровня сложности
При срабатывании будильника поверх всех окон, в центре экрана, появляется вторая форма красного цвета с этой надписью.
Procedure TForm1. FormPaint ( Sender: TObject ) ;
Var R: TRect; Sec , tmp: Word ;
Begin
With Form1. Canvas Do
Begin
DecodeDateTime ( Now , tmp, tmp, tmp, tmp, tmp, Sec , tmp ) ; // Uses … , DateUtils;
Form1. Caption := IntToStr ( Sec ) ;
Rectangle ( 150 , 100 , 750 , 500 ) ;
Ellipse ( 250 , 100 , 650 , 500 ) ;
MoveTo ( 450 , 300 ) ;
LineTo ( Round ( 450 -200 * Cos ( ( Sec * 6 +90 ) / 180 * Pi ) ) , Round ( 300 -200 * Sin ( ( Sec * 6 +90 ) / 180 * Pi ) ) ) ;
Ellipse ( 443 , 293 , 457 , 307 ) ;
End ;
End ;
Procedure TForm1. Timer1Timer ( Sender: TObject ) ;
Begin
Repaint;
End ;
На нашем сайте вы найдете множество статей на разные тематики, а так же сможете найти и скачать много интересного Рекомендуем Вам добавить Наш сайт в закладки, а также подписаться на RSS ленту, чтобы не пропускать интересных новостей.
Label вкладка Standard
Timer вкладка System
Кидаем на форму Labe иl Timer.
Кликаем по таймеру два раза и там пишем:
В итоге код в таймере должен получиться такой:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.caption:=timetostr(time);
end;
Кликаем по форме один раз и в функции BorderStyle ставим bsDialog
Кликаем по лабел один раз и в функции Font выбираем шрифт и размер шрифта
Исходник замечательного будильника, с кучей различных примочек и наворотов
Исходник программы, показывающей пример создания небольшого симпатичного календаря с набором многочисленных настроек
Исходник программы, показывающей пример создания двоичных часов (бинарные часы), использующих светодиоды вместо стрелок
Исходник программы, показывающей пример создания секундомера, генерирующего звук перед истечением заданного времени (генерация периодических колебаний в буфер звуковой карты). Используемый компонент TWaveOut создается во время выполнения программы и не требует установки
Программа, демонстрирующая аналоговые часы (изображение циферблата). Отрисовка выполняется с помощью Canvas.
Исходник программы, показывающей пример создания скринсейвера в виде трехмерных часов
Исходник программы, показывающей пример создания красивых часов используя OpenGL
Исходник программы, показывающей пример создания симпатичных PNG часов
Исходник программы, предназначенной для сравнения 2-х дат на предмет вычисления разницы во времени на выбранном промежутке
Читайте также: