Элемент управления Edit, реагирующий на событие OnTimer.

Как-то раз встала такая проблема: если пользователь какое-то время ничего не вводит в элемент управления Edit, то предупредить его об этом.

unit
 EditOnTime; 

interface
 

uses
 
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; 

type
 
TEditOnTime = class
(TEdit) 
private
 
  FInterval: integer; 
  FTimer: TTimer; 
  FOnTimer: TNotifyEvent; 
  procedure
 SetInterval(Interval: integer); 
  procedure
 Timer(Sender: TObject); 
protected
 
  procedure
 KeyPress(var Key: char); override
public
 
  constructor
 Create(AOwner: TComponent); override
  destructor
 Destroy; override
published
 
  property
 Interval: integer read FInterval write SetInterval default 750
property OnTimer: TNotifyEvent read FOnTimer write FOnTimer;   
end


procedure
 Register

implementation
 

//******************* RegisterComponent 

// Здесь мы регистрируем компонент в IDE 

procedure
 Register
begin
 
RegisterComponents('MPS', [TEditOnTime]);   
end


//******************* TEditOnTime.SetInterval 

// устанавливаем интервал таймера 

procedure
 TEditOnTime.SetInterval(Interval: integer); 
begin
 
FInterval := Interval;   
if Assigned(FTimer) then   
  FTimer.Interval := FInterval;   
end


//******************* TEditOnTime.Create 

constructor
 TEditOnTime.Create(AOwner: TComponent); 
begin
 
FInterval := 750;   
inherited Create(AOwner);   
if not (csDesigning in ComponentState) then   
  try   
   FTimer := TTimer.Create(self);   
   FTimer.Enabled := false;   
   FTimer.Interval := FInterval;   
   FTimer.OnTimer := Timer;   
  except   
   FreeAndNil(FTimer);   
  end;   
end


//******************* TEditOnTime.Destroy 

destructor
 TEditOnTime.Destroy; 
begin
 
if Assigned(FTimer) then FreeAndNil(FTimer);   
inherited Destroy;   
end


//******************* TEditOnTime.OnTimer 

procedure
 TEditOnTime.Timer(Sender: TObject); 
begin
 
FTimer.Enabled := false;   
if Assigned(FOnTimer) then FOnTimer(self);   
end


//******************* TEditOnTime.KeyPress 

procedure
 TEditOnTime.KeyPress(var Key: char); 
begin
 
FTimer.Enabled := false;   
inherited KeyPress(Key);   
FTimer.Enabled := (Text <> ''and Assigned(FTimer) and Assigned(FOnTimer);   
end


end
.