Delphi. Таймер TTimer

Компоненты   12 Январь 2013  Автор статьи: admin 

Компонент TTimer в Delphi позволяет регулярно выполнять определенные действия с определенным временным интервалом. В этом уроке мы и рассмотрим данный компонент.
Научимся создавать и настраивать данный компонент в Design-time. Для этого кинем на форму компонент TTimer с вкладки System панели Tool Palette. Выглядит он следующим образом:
Компонент TTimer Delphi
TTimer является невизуальным компонентом, поэтому данную иконку в самой программе мы не увидим. Рассмотрим его свойства на панеле Object Inspector:

Enabled Это свойство отвечает за состояние работы таймера. Если его значение — true, то таймер работает, что означает, что его работа начнется сразу после запуска программы. В противном случае (false) таймер будет находится в неактивном состоянии.
Interval Интервал времени в миллисекундах между каждым выполнением действий. Это ожидание таймера будет происходить перед каждым выполнением.
Name Имя компонента.

Для того чтобы указать сами действия для таймера, необходимо воспользоваться единственным событием таймера — OnTimer. Выглядит оно следующим образом:

1
2
3
4
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Действия, которые должен выполнять таймер
end;

Например вывод обыкновенного сообщения на экран будет выглядеть таким образом:

1
2
3
4
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  ShowMessage('Cybern.ru');
end;

Как видите, в работе с таймером нет ничего сложного. Теперь научимся создавать его в режиме Run-time, т.е. непосредственно в программном коде, а не визуально на форме приложения.
Создавать таймер мы будем внутри события OnClick у кнопки Button1, т.е. таким образом какое-либо действие этого таймера начнет выполняться при нажатии на определенную кнопку.

1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
var
  MyTimer: TTimer; // Объявляем экземпляр класса TTimer
begin
  MyTimer := TTimer.Create(Form1);
  // Создаем таймер. Конструктору Create необходимо передать владельца (родителя таймера). Укажем форму программы
  MyTimer.OnTimer := MyTimerEvent;
  // Указываем событие для таймера. Оно должно быть вида procedure(Sender: TObject) и являться методом какого-либо класса.
  // В нашем случае - это метод MyTimerEvent класса нашей формы TForm1, который мы создали вручную.
  // Сразу после этого таймер запускается. Если после создания запускать таймер не нужно, то можно указать свойству Enabled значение false.
  // А когда вновь потребуется запустить таймер, можно передать этому значению true.
  MyTimer.Interval := 1500; // Интервал таймера
end;

В качестве события OnTimer для нашего таймера необходимо использовать метод какого-либо класса. Поэтому мы создадим метод procedure MyTimerEvent(Sender: TObject) у нашей формы (класс TForm1):

1
2
3
4
5
6
7
8
9
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure MyTimerEvent(Sender: TObject); // Будущее событие для таймера, которое является методом класса нашей формы.
  end;

Cам метод будет выглядеть так:

1
2
3
4
procedure MyTimerEvent(Sender: TObject);
begin
  ShowMessage('Cybern.ru is the best web resource about programming.'); // Выводим сообщение в таймере
end;

Часто требуется сделать так, чтобы таймер выполнил указанные в его событии OnTimer действия определенное количество раз, после чего выключился. Реализовать это просто. Достаточно завести какую-либо глобальную переменную типа Integer, которая будет играть роль счетчика выполнения таймера:

1
2
3
var
  Form1: TForm1;
  a: integer; // Счетчик выполнения таймера

Перед запуском таймера мы обнулим эту переменную:

1
a := 0;

А в обработчике таймера (событии OnTimer) будем каждый раз увеличивать эту переменную на единицу, а также будем проверять, превысила ли эта переменная определенный лимит:

1
2
3
4
5
6
7
8
9
10
procedure TForm1.MyTimerEvent(Sender: TObject);
begin
  ShowMessage('Cybern.ru is the best web resource about programming.'); // Выводим сообщение в таймере
  Inc(a);
  if a > 5 then
  begin
    a := 0;
    (Sender as TTimer).Enabled := False; // Обращаемся к таймеру через Sender и выключаем его.
  end;
end;

В общем-то, про таймер мало чего еще можно рассказать, поэтому мы закончим наш урок. Как всегда, скачать исходный код примера можно по этой ссылке.

  • Ирина

    скачала код примера по ссылке, не работает

    [DCC Fatal Error] Project1.dpr(5): F1026 File not found: ‘Vcl.Forms.dcu’

Научиться программировать

  • на Delphi

  • на Java

  • на C++