Delphi - база знаний

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


Элемент управления 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.

Взято с Исходников.ru



Содержание раздела