ltimer.pp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. unit ltimer;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils;
  6. type
  7. { TLTimer }
  8. TLTimer = class(TObject)
  9. protected
  10. FOnTimer: TNotifyEvent;
  11. FInterval: TDateTime;
  12. FStarted: TDateTime;
  13. FOneShot: Boolean;
  14. FEnabled: Boolean;
  15. function GetInterval: Integer;
  16. procedure SetInterval(const aValue: Integer);
  17. public
  18. procedure CallAction;
  19. property Enabled: Boolean read FEnabled write FEnabled;
  20. property Interval: Integer read GetInterval write SetInterval;
  21. property OneShot: Boolean read FOneShot write FOneShot;
  22. property OnTimer: TNotifyEvent read FOnTimer write FOnTimer;
  23. end;
  24. implementation
  25. { TLTimer }
  26. function TLTimer.GetInterval: Integer;
  27. begin
  28. Result := Round(FInterval * MSecsPerDay);
  29. end;
  30. procedure TLTimer.SetInterval(const aValue: Integer);
  31. begin
  32. FInterval := AValue / MSecsPerDay;
  33. FStarted := Now;
  34. FEnabled := true;
  35. end;
  36. procedure TLTimer.CallAction;
  37. begin
  38. if FEnabled and Assigned(FOnTimer) and (Now - FStarted >= FInterval) then
  39. begin
  40. FOnTimer(Self);
  41. if not FOneShot then
  42. FStarted := Now
  43. else
  44. FEnabled := false;
  45. end;
  46. end;
  47. end.