home *** CD-ROM | disk | FTP | other *** search
/ Delphi 2.0 - Programmer's Utilities Power Pack / Delphi 2.0 Programmer's Utilities Power Pack.iso / a_to_d / dsleep / sleeper.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1996-09-15  |  1.7 KB  |  92 lines

  1. unit Sleeper;
  2.  
  3. interface
  4.  
  5. uses
  6.   Classes, ExtCtrls;
  7.  
  8. type
  9.   TSleeper = class(TComponent)
  10.   private
  11.     FTimer: TTimer;
  12.     Expired: Boolean;
  13.     procedure Expire(Sender: TObject);
  14.     function GetInterval: LongInt;
  15.     procedure SetInterval(AInterval: LongInt);
  16.   public
  17.     constructor Create(AOwner: TComponent); override;
  18.     destructor Destroy; override;
  19.     procedure Sleep;
  20.     procedure SleepFor(AInterval: LongInt);
  21.   published
  22.     property Interval: LongInt read GetInterval write SetInterval;
  23.   end;
  24.  
  25. procedure Register;
  26.  
  27. implementation
  28.  
  29. uses
  30.   Forms;
  31.  
  32. constructor TSleeper.Create(AOwner: TComponent);
  33. begin
  34. inherited Create(AOwner);
  35. FTimer := TTimer.Create(Self);
  36. FTimer.Enabled := False;
  37. end;
  38.  
  39. destructor TSleeper.Destroy;
  40. begin
  41. FTimer.Free;
  42. FTimer := nil;
  43. inherited Destroy;
  44. end;
  45.  
  46. procedure TSleeper.Expire(Sender: TObject);
  47. begin
  48. Expired := True;
  49. end;
  50.  
  51. function TSleeper.GetInterval: LongInt;
  52. begin
  53. if Assigned(FTimer) then Result := FTimer.Interval
  54. else Result := 0;
  55. end;
  56.  
  57. procedure TSleeper.SetInterval(AInterval: LongInt);
  58. begin
  59. if Assigned(FTimer) then FTimer.Interval := AInterval;
  60. end;
  61.  
  62. procedure TSleeper.Sleep;
  63. begin
  64. if Assigned(FTimer) then
  65.   begin
  66.   Expired := False;
  67.   FTimer.OnTimer := Expire;
  68.   FTimer.Enabled := True;
  69.   repeat
  70.     Application.ProcessMessages;
  71.     until Expired;
  72.   FTimer.Enabled := False;
  73.   end;
  74. end;
  75.  
  76. procedure TSleeper.SleepFor(AInterval: LongInt);
  77. begin
  78. if Assigned(FTimer) then
  79.   begin
  80.   if FTimer.Interval <> AInterval then
  81.     FTimer.Interval := AInterval;
  82.   Sleep;
  83.   end;
  84. end;
  85.  
  86. procedure Register;
  87. begin
  88. RegisterComponents('Pandion', [TSleeper]);
  89. end;
  90.  
  91. end.
  92.