Цифровые часы
Большинство объектов в визуальных средах играет пассивную роль — они ждут, пока не произойдет адресованное им событие, возникшее в результате инициативы пользователя (сигнал клавиатуры или мыши), операционной системы или нашего приложения. В отличие от них объект 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 размер формы задается в твипах, и окно порядка 250100 пикселов соответствует примерно следующим значениям свойств ширины и высоты:
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
