miniTip : Extendiendo el TIdleTimer de Lazarus

Escenario: Se requiere lanzar un proceso cada cierto tiempo que la aplicacion este sin hacer nada, o sea, en Idle :)

Como TIdleTimer no tiene "memoria" creamos nuestra clase TContador ( en honor a nuestro campeon ;P ) dotandole de memoria.

[sourcecode='delphi']
{TContador}
TContador = class(TIdleTimer)
procedure Contando(Sender :TObject);
procedure Inicio(Sender :TObject);
procedure Fin(Sender :TObject);
private
Acum, tMax : Integer;
public
constructor Create(AOwner : TComponent ;Maximo : Integer; curr : TCurrante);
end;
[/sourcecode]

Implementamos el constructor...

[sourcecode='delphi']
{TContador}
constructor TContador.Create(AOwner : TComponent; Maximo : Integer);
begin
inherited Create(AOwner);
Self.Enabled:=false;
Self.OnStartTimer:=@Inicio;
Self.OnStopTimer:=@Fin;
Self.OnTimer:=@Contando;
Self.Acum:=0;
Self.tMax:=Maximo;
Self.AutoEnabled:=true;
end;
[/sourcecode]

Cada ver que se produzca el evento OnStartTimer pondremos el acumulador a 0

[sourcecode='delphi']
procedure TContador.Inicio(Sender :TObject);
begin
Self.Acum:=0;
DebugLn('Inicio');
end;
[/sourcecode]

Aqui simplemente queria saber cuando se lanza OnStopTimer ;)

[sourcecode='delphi']
procedure TContador.Fin(Sender :TObject);
begin
DebugLn('Fin');
end;
[/sourcecode]

Este proceso se ejecuta cuando la aplicacion esta Idle y lanza el proceso cuando el tiempo acumulado supera el tiempo maximo.

[sourcecode='delphi']
procedure TContador.Contando(Sender :TObject);
begin
Inc(self.Acum);
if self.Acum > self.tMax then
begin
Self.Enabled:=false;
Self.Enabled:=true;
DebugLn('Lanzamos proceso');
end;
DebugLn('Contando - ' + IntToStr(self.acum));
end;
[/sourcecode]

Proceso sencillo aunque cuando eres un newbie no aparece en la mente de manera inmediata

Tags: 

Añadir nuevo comentario

Filtered HTML

  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Plain text

  • No se permiten etiquetas HTML.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Saltos automáticos de líneas y de párrafos.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
CAPTCHA de imagen
Introduzca los caracteres mostrados en la imagen.