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

Previous  Top  Next

    
 

 

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

Code:

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.

 

 

 

©Drkb::00531

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