pascalabcnet/TestSuite/CompilationSamples/Timers.pas

94 lines
2.4 KiB
ObjectPascal
Raw Permalink Normal View History

Unit Timers;
2015-05-14 22:35:07 +03:00
(*
Обертка для класса System.Timers.Timer
(c) Брагилевский В.Н. 2007
2015-05-14 22:35:07 +03:00
Сохранен интерфейс класса Timer из PascalABC
за исключением функции Handle.
2015-05-14 22:35:07 +03:00
*)
interface
uses System;
type
/// Класс таймера
2015-05-14 22:35:07 +03:00
Timer = class
private
_timer: System.Timers.Timer;
_procedure: ()->();
2015-05-14 22:35:07 +03:00
procedure SetEnabled(_enabled: boolean);
function GetEnabled: boolean;
procedure SetInterval(_interval: integer);
function GetInterval: integer;
procedure OnTimer(sender: object; e: System.Timers.ElapsedEventArgs);
public
/// Создает таймер с интервалом срабатывания ms миллисекунд и обработчиком TimerProc
constructor Create(ms: integer; TimerProc: procedure := nil);
/// Запускает таймер
2015-05-14 22:35:07 +03:00
procedure Start;
/// Останавливает таймер
2015-05-14 22:35:07 +03:00
procedure Stop;
/// Запущен ли таймер
2015-05-14 22:35:07 +03:00
property Enabled: boolean read GetEnabled write SetEnabled;
/// Интервал срабатывания таймера
2015-05-14 22:35:07 +03:00
property Interval: integer read GetInterval write SetInterval;
/// Интервал срабатывания таймера
property TimerProc: ()->() read _procedure write _procedure;
2015-05-14 22:35:07 +03:00
end;
/// Создать и запустить таймер, вызывающий процедуру TimerProc каждые ms миллисекунд
2019-08-18 00:16:39 +03:00
function CreateTimerAndStart(ms: integer; TimerProc: procedure): Timer;
2015-05-14 22:35:07 +03:00
implementation
2019-08-18 00:16:39 +03:00
function CreateTimerAndStart(ms: integer; TimerProc: procedure): Timer;
begin
Result := new Timer(ms,TimerProc);
Result.Start;
end;
procedure Timer.OnTimer(sender: object; e: System.Timers.ElapsedEventArgs);
begin
_procedure;
end;
constructor Timer.Create(ms: integer; TimerProc: procedure);
begin
_timer := new System.Timers.Timer(ms);
_procedure := TimerProc;
_timer.Elapsed += OnTimer;
end;
procedure Timer.Start;
begin
Enabled := True;
end;
procedure Timer.Stop;
begin
Enabled := False;
end;
procedure Timer.SetEnabled(_enabled: boolean);
begin
_timer.Enabled := _enabled;
end;
function Timer.GetEnabled: boolean;
begin
Result := _timer.Enabled;
end;
procedure Timer.SetInterval(_interval: integer);
begin
_timer.Interval := _interval;
end;
function Timer.GetInterval: integer;
begin
Result := Round(_timer.Interval);
end;
2015-05-14 22:35:07 +03:00
end.