Компонент Timer (таймер) (вкладка System) служит для иницииро-
вания какого-либо события через определенные интервалы (проме-
жутки) времени. Данный компонент является невизуальным, поэтому
при проектировании его значок можно поместить в любое место фор-
мы. Основные свойства компонента приведены в табл. 1.1.
Таблица 1.1. Свойства компонента Timer
Таймер включается при установке значения True в его свойство
Enabled. Однажды включенный таймер будет через равный промежу-
ток времени (заданный в свойстве Interval) возбуждать событие
Timer до тех пор, пока его свойство Enabled не примет значения
False.
Рассмотрим пример, демонстрирующий использование компонен-
та Timer для реализации плавного появления окна приложения на эк-
ране (когда окно из прозрачного плавно становится полностью непро-
зрачным). В разрабатываемое приложение необходимо поместить
компонент Timer и написать два обработчика для событий FormCreate
и Timer в соответствии с листингом:
//Событие, возникающее при создании формы
procedure TForm1.FormCreate(Sender: TObject);
begin
AlphaBlend:=true; //разрешаем менять прозрачность формы
AlphaBlendValue:=5; //начальная степень прозрачности
Timer1.Interval:=55; //интервал времени для таймера
Timer1.Enabled:=true;//запуск таймера
end;
//Событие, возникающее всякий раз по истечении времени,
//определяемого свойством Timer1.Interval пока Timer1
//реагирует на событие OnTimer (Enabled=true)
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if AlphaBlendValue=255 //проверка непрозрачности формы
then //если форма полностью непрозрачна
Timer1.Enabled:=false //выключаем таймер
else //если форма пока прозрачна
AlphaBlendValue:=AlphaBlendValue+5 //увеличиваем степень
//непрозрачности
end;
Пример. Создадим программу простейшего секундомера, внешний
вид которой показан на рис. 1.1.
Рис. 1.1. Внешний вид проектируемого приложения «Секундомер»
(слева – на этапе разработки, справа – на этапе выполнения)
Разместим на форме компоненты в соответствии с рис. 1.1. Снача-
ла свойство Enabled компонента Timer установлено в False, поэтому
таймер не генерирует никаких сообщений. Процедура обработки со-
бытия Click на кнопке Пуск (Button1) присваивает свойству Enabled
значение True, тем самым запуская таймер или значение
Enabled:=False, тем самым останавливая его. Процедура обработки
события Timer отсчитывает интервалы с момента нажатия на кнопку
Пуск. Нажатие на кнопку Сброс останавливает секундомер — опять же
изменением свойства Enabled таймера Timer1.
Листинг программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
sec, min: 0..60;
implementation
{$R *.dfm}
//Событие, возникающее при создании формы
procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption:='00:00'; //текст метки
Button1.Caption:='Пуск'; //название кнопки Button1
Button2.Caption:='Сброс'; //название кнопки Button2
Timer1.Enabled:=false //таймер не запущен
end;
//Обработка нажатия на кнопку "Пуск" / "Стоп"
procedure TForm1.Button1Click(Sender: TObject);
begin
if Timer1.Enabled
then //если секундомер работает
begin
Timer1.Enabled:=False; //останавливаем таймер
Button1.Caption:='Пуск'; //меняем название кнопки
Button2.Enabled:=True; //кнопка "Сброс" доступна
end
else //если секундомер не работает
begin
Timer1.Enabled:=True; //запускаем таймер
Button1.Caption:='Стоп'; //меняем название кнопки
Button2.Enabled:=False; //кнопка "Сброс" недоступна
end
end;
//Обработка нажатия на кнопку "Сброс"
procedure TForm1.Button2Click(Sender: TObject);
begin
sec:=0;
min:=0;
Label1.Caption:='00:00';
Button2.Enabled:=False; //кнопка "Сброс" недоступна
Timer1.Enabled:=False; //останавливаем таймер
end;
//Событие, возникающее всякий раз по истечении времени,
//определяемого свойством Timer1.Interval пока Timer1
//реагирует на событие OnTimer (Enabled=true)
procedure TForm1.Timer1Timer(Sender: TObject);
var
str: string;
begin
if sec=59
then
begin
inc(min);
sec:=0;
end
else inc(sec);
if min<10
then str:='0'+IntToStr(min)
else str:=IntToStr(min);
if sec<10
then str:=str+':0'+IntToStr(sec)
else str:=str+':'+IntToStr(sec);
Label1.Caption:=str;
end;
end.
|