Тема. Невизуальные компоненты. Timer. Время и дата.




На прошлом уроке мы с вами начали говорить о невизуальном компоненте (Open Dialog) с закладки компонентов Dialogs. Что это за компонент и какие функции он выполнял? Что понимается под словосочетанием невизуальный компонент? Действительно ли этот компонент можно назвать невизуальным? Да, действительно компонент можно назвать невизуальным по причине его отсутствия в режиме runtime. В то же время, его можно назвать визуальным, потому что при вызове диалогового окна открытия, сохранения или печати – окно становится видимым, т.е. визуальным.

Но есть и такие компоненты, которые действительно не могут быть видны в runtime, потому что наследуют системные функции, такие как время BIOS, или работают на прикладном уровне, выступая провайдерами между визуальными компонентами и источниками данных, например компоненты для управления базой данных или при работе с реестром ОС Windows. Один из таких компонентов – Timer, компонент закладки System, наследующий системную дату и время ОС Windows.

Для того, чтобы понять как работает компонент и для чего он предназначен давайте определимся с тем, из каких элементов может складываться определенный интервал времени. Микросекунда, секунда, минута, час, день, неделя, месяц, год. Все правильно. Но как, компьютеру, без шестеренок механических часов, отсчитывать секунды и показывать текущую дату и время. Электроника, микропроцессорная техника, прерывания, вызов функций. Все правильно, но немного уходит в русло программирования под MSDOS. Сегодня мы работаем с ОС Windows 7/8 и знать что такое ассемблеры практические никому не надо, а зря, ведь для более точного измерения времени требуется написание кода на языках низкого уровня. Тем не менее, доподлинно известно, что интервал в одну секунду измеряется в значении равном 1000 миллисекунд. Итак, главное свойство нашего компонента - свойство Interval, задающее промежуток времени через который будет выполняться действие.

 

0,5 секунды = 500

1 секунда = 1000

15 секунд = 15 000

65 секунд = 65 000

 

On Timer – единственное событие компонента, предназначенное для выполнения действий в заданном интервале Timer.

 

Пример 1. В заданном интервале времени, в 1 секунду, выводить в заголовке формы увеличиваемое значение на 1, до момента закрытия приложения. Итак, по истечении 1 секунды значение свойства Caption - Form1 должно измениться на 1, через еще 1 секунду еще на 1, и увеличиваться до тех пор, пока приложение не будет закрыто. Для выполнения подобного задания, требуется работать с числом, т.е. значением времени. Вспомнив функции преобразования целого числа в строку и обратно (время не может быть дробным), вы должны рекурсивно преобразовать строку в число, а затем, прибавив к полученному значению значение изменяющегося интервала, преобразовать полученное значение из числа, в строку присвоив полученную функцию к строчному типу данных – Caption, свойству формы приложения.

Откройте Delphi и создайте новый проект. Сохраните проект в новой папке. Разместите компонент Timer1 на главной форме приложения. Измените свойства Caption формы на значение «0» (ноль). Откройте события компонента Timer и щелкните дважды напротив события OnTimer.

 

 

Код - Form1.Caption:=inttostr (strtoint(Form1.Caption)+1); // рекурсивное преобразование «строка-число-строка» для увеличения значения на единицу в заголовке формы приложения показывает работу с компонентом таймер с интервалом в 1 секунду. Таким образом, мы получаем примитивный «секундомер» в заголовке окна.

 

Измените значение Interval c 1000 на 1. Запустите программу. Опишите что изменилось?

Задание 2. Через полутороминутный интервал после открытия программы требуется выполнить действие по закрытию формы приложения (Form1.Close;). Какая цифра будет в свойстве Interval? Что будет описано в процедуре события On Timer? Назовите и объясните другие свойства компонента Timer?

 

В Delphi включены встроенные функции для работы с датой и временем. Вы можете вывести на форме время и дату, а так же использовать данные значения времени и даты для работы подпрограмм. Например функции определения дня недели, дня месяца или текущего времени могут быть использованы для автоматизации процессов на производстве, для организации планировщиков, автоматической смены расписания, организации умного дома и прочее. Запишите следующие функции:

 

Функция datetostr (date) – вывод (перевод в строчный тип данных) текущей даты

Функция timetostr (date), timetostr (time) – вывод (перевод в строчный тип данных) текущего времени

Функция dayofweek (now) – целочисленное значение номера дня недели, 1 - воскресенье, 7 - суббота

Функция variant(DayOfTheMonth(Date)) - целочисленное значение числа текущего месяца

Функция variant(DayOfTheYear(Date)) - целочисленное значение номера дня текущего года

Функция monthOfTheYear(Date) – целочисленное значение номера месяца текущего года, 1 – январь…

 

Пример 2. Определение високосного года:

 

var Year,Month,Day,DOW: Word;

Begin

if (DecodeDateFully(Date(),Year,Month,Day,DOW))=true

then Label1.Caption:='год високосный' else Label1.Caption:='год не високосный';

 

Задание 3. Из имеющегося списка функций составьте программу, выводящую следующие значения: время; день недели (понедельник - воскресенье); номер дня месяца(1-29,30,31); месяц (январь - декабрь); дата; высокосный/невысокосный год. Для вывода данных используйте компоненты Label, Timer. Для определения дня недели и месяца, так как функция возвращает целое число, используйте условный оператор case of. Время на выполнение 15 минут.

 

11:35:44 понедельник   сентября 01.09.2014 год не невысокосный

 

 

Итак, мы знаем основные функции для работы с датой и временем, мы умеем их применить для реализации программы оповещения о текущей дате и времени. Таким образом, мы можем синтезировать функции. Давайте проанализируем, для чего еще может понадобиться компонент Timer? Собственно для таймера, секундомера и обратного таймера, а так же выполнения любого действия требующего изменение свойства в определенный интервал времени, например изменение положения компонента на форме, т.е. перемещение. Что нужно знать для того чтобы сделать секундомер и таймер? Ответ. Для секундомера нам надо знать: сколько секунд в одной минуте, сколько минут в одном часе, сколько часов в одних сутках и т.д. Для таймера надо указать время, через которое программа оповестит об его окончании. Как это сделать? Ответ на этот вопрос есть выше (смотрите в Пример 1).

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-04 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: