Пропустить навигацию.
Главная

Цифровые часы

Большинство объектов в визуальных средах играет пассивную роль — они ждут, пока не произойдет адресованное им событие, возникшее в результате инициативы пользователя (сигнал клавиатуры или мыши), операционной системы или нашего приложения. В отличие от них объект Timer генерирует событие OnTimer по собственной инициативе. Возникает такое событие через равные интервалы времени, длительность которых в миллисекундах задается значением свойства Interval. Адресуется это событие своему собственному обработчику, программа которого может использоваться для хронометража некоторых процессов.

Приложения 9_03 (BCB), 9_04 (Delphi), 9_05 (VB).

Построим приложение «Часы», единственной функцией которого является опрос и отображение текущего значения машинного датчика времени.

В средах BCB и Delphi установим следующие размеры формы — Height=100, Width=250. Заменим заголовок формы (свойство Caption) текстом «Часы». Разместим на форме объект StaticText1, который отличается от метки Label только тем, что может быть окаймлен рамкой. Установим следующие значения его свойств:

  • Align=alClient (это означает, что объект полностью займет область клиента;

  • Alignment=taCenter (это означает, что отображаемый текст, — показания часов, — будет расположен в центре);

  • AutoSize=False (размер объекта будет сохраняться фиксированным, не подстраиваясь под длину отображаемого текста);

  • BorderStyle=sbsSunken (объект вдавится в форму и вокруг него появится заметная граница);

  • Удалим значение свойства Caption, заменив его пустой строкой;

  • Щелкнем по свойству Font и в появившемся диалоговом окне установим параметры шрифта — Times New Roman, size=40 pt;

Разместим на форме объект Timer1, у которого значение свойства Interval по умолчанию равно 1000 миллисекунд. Нас это устраивает, т.к. период между регулярно генерируемыми событиями будет равен 1 сек. Положение таймера на форме роли не играет, т.к. этот объект относится к разряду невидимых, и во время работы приложения он не отображается. Сформируем программу обработчика события OnTimer, содержащую единственный оператор по запросу текущего времени и записи его значения в свойство Caption объекта StaticText1.

На входном языке BCB это обработчик выглядит следующим образом:

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

StaticText1->Caption=Now().TimeString();

}

Обращение к методу Now позволяет извлечь из операционной системы текущие значения даты и времени в формате DateTime. С помощью метода TimeString из полученного результата выделяется текущее время и преобразуется в данное типа AnsiString.

На рис. 9.5 приведены образцы форм нашего приложения на стадии проектирования и во время работы программы.

Обработка календарных дат и временных интервалов

Рис.9.5 Приложение "Часы" на стадии проектирования и во время работы

В системе Delphi обращение к аналогичным методам выглядит следующим образом:

procedure TForm1.Timer1Timer(Sender: TObject);

begin

StaticText1.Caption:=TimeToStr(Now);

end;

В системе VB размер формы задается в твипах, и окно порядка 250100 пикселов соответствует примерно следующим значениям свойств ширины и высоты:

Height=1500

Width=3285

В качестве временного табло здесь можно использовать объект типа Label, т.к. набор его свойств позволяет очертить рамку:

BorderStyle=Fixed Single

Метку можно прижать к левой верхней границе области клиента, положив нулевые значения свойств Left и Top. До размеров окна растянуть область метки можно вручную или задать следующие значения высоты и ширины:

Height=1095

Width=3135

Значения параметров Alignment, AutoSize и Font выбираются такие же, как и в предыдущих приложениях.

Обработчик события Timer здесь выглядит еще проще за счет использования системной переменной Time:

Private Sub Timer1_Timer()

Label1.Caption = Time

End Sub