Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник Pascal ABC.doc
Скачиваний:
66
Добавлен:
07.11.2018
Размер:
985.6 Кб
Скачать

Модуль Timers

Таймеры позволяют выполнять указанное действие периодически через равные промежутки времени. Процедуры и функции для управления таймерами содержатся в модуле Timers.

Функция CreateTimer(ms,TimerProc) создает таймер, выполняющий каждые ms миллисекунд действие, содержащееся в процедуре без параметров TimerProc, и возвращает его целочисленный описатель. Созданный таймер сразу же запускается.

Функция CreateTimerExt(ms,TimerProcExt) создает таймер, выполняющий каждые ms миллисекунд действие, содержащееся в процедуре с одним целочисленнным параметром TimerProcExt, и возвращает его целочисленный описатель. Созданный таймер сразу же запускается. Целочисленный параметр, передаваемый процедуре TimerProcExt, хранит описатель таймера, вызвавшего эту процедуру.

Процедура StartTimer(n) запускает таймер с описателем n.

Процедура StopTimer(n) останавливает таймер с описателем n.

Процедура SetTimerInterval(n,ms) устанавливает  у таймера с описателем n интервал в ms миллисекунд.

Функция TimerInterval(n) возвращает интервал у таймера с описателем n.

Функция TimerEnabled(n) возвращает True, если таймер запущен, и False в противном случае.

Процедура DestroyTimer(n) разрушает таймер с описателем n.

Модуль Timers содержит также класс Timer, имеющий следующий интефейс:

type   Timer=class     constructor Create(ms: integer; TimerProc: procedure);     destructor Destroy;     procedure Start;     procedure Stop;     property Enabled: boolean;     property Interval: integer;     function Handle: integer;   end;  

Конструкторы и деструкторы

constructor Create(ms: integer; TimerProc: procedure);

Создает таймер, выполняющий каждые ms миллисекунд действие, содержащееся в процедуре без параметров TimerProc. Созданный таймер сразу же запускается.

constructor Create(ms: integer; TimerProc: procedure);

Создает таймер, выполняющий каждые ms миллисекунд действие, содержащееся в процедуре с одним целочисленнным параметром TimerProc. Созданный таймер сразу же запускается. Целочисленный параметр, передаваемый процедуре TimerProcExt, хранит описатель таймера, вызвавшего эту процедуру.

destructor Destroy;

Разрушает объект и содержащийся в нем таймер.  

Свойства

property Enabled: boolean;

Запущен ли таймер. Присваивание Enabled=False эквивалентно вызову Stop, а присваивание Enabled=True - вызову Start.  

Методы

procedure Start;

Запускает таймер.

procedure Stop;

Останавливаетает таймер.

function Handle: integer;

Возвращает описатель таймера.  

Таймеры удобнее рассматривать как объекты класса Timer, в котором собраны все основные действия с таймерами. Такой подход является более удобным и современным, чем подход с описателями таймеров. Единственный его недостаток - необходимость вводить основные понятия, связанные с классами. Подход с описателями позволяет работать с таймерами сразу после рассмотрения темы "Процедуры и функции". Пример 1

Вариант с описателем таймера

uses Timers,Events;

procedure TimerProc; begin   write(1); end;

var t: integer; begin   t:=CreateTimer(200,TimerProc); end.

Вариант с классом Timer

uses Timers,Events;

procedure TimerProc; begin   write(1); end;

var t: Timer; begin   t:=Timer.Create(200,TimerProc); end.

Для периодического вызова процедуры таймера необходимо после его создания продолжить выполнение приложения. Это можно сделать либо поместив в конце основной программы бесконечный цикл, либо сделав приложение событийным, подключив модуль Events.

Пример 2

Вариант с описателем таймера

uses Timers, Events;

var t1,t2: integer; procedure TimerProcExt(n: integer); begin   if n=t1 then     write(1,' ')   else write(2,' '); end;

begin   t1:=CreateTimerExt(200,TimerProcExt);   t2:=CreateTimerExt(300,TimerProcExt); end.

Вариант с классом Timer

uses Timers, Events;

var t1,t2: Timer; procedure TimerProcExt(n: integer); begin   if n=t1.Handle then     write(1,' ')   else write(2,' '); end;

begin   t1:=Timer.Create(200,TimerProcExt);   t2:=Timer.Create(300,TimerProcExt); end.