Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

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

01.01.2007

Как-то раз встала такая проблема: если пользователь какое-то время ничего не вводит в элемент управления 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.

Взято из https://forum.sources.ru