Evento em um timer

Delphi

21/11/2003

Galera e o seguinte:


ve se voceis podem me ajudar eu tenho certeza q tem como so não descobri como faz

tenho um aquivo de funcoes .pas, criei um variavel ttimer dentro de uma função, passei todas a propriedades normais para esta variavel (interval,etc..) no evento ontimer ele da erro. fiz como esta abaixo:

o q tem de errado?


procedure confbanco(banco:tibquery;transa:TIBTransaction);
var
tempo:ttimer;
i:integer;
begin
banco.Close;
tempo:=ttimer.Create(nil);
transa.Active:=true;
tempo.Enabled:=false;
tempo.Interval:=1000;
tempo.OnTimer :=evento;
tempo.Enabled:=true;
end;


procedure Evento(Sender: TObject);
begin
if (bancoy.Active=true) and (bancoy.State in [dsBrowse]) then
bancoy.Refresh;
end;

Valeu pela ajuda!! q Deus abençoe a Todos!!1


Jbspio

Jbspio

Curtidas 0

Respostas

Beppe

Beppe

21/11/2003

A rotina Evento [b:38e4c6ba8d]deveria[/b:38e4c6ba8d] estar dentro de uma classe, mas existe um hack:
@OnTimer := @Evento;



GOSTEI 0
Jbspio

Jbspio

21/11/2003

Obrigado pela resposta


Valeu mas nao deu certo!! continua o mesmo erro!


GOSTEI 0
Beppe

Beppe

21/11/2003

Obrigado pela resposta Valeu mas nao deu certo!! continua o mesmo erro!


É que é @Tempo.OnTimer := @Evento;


GOSTEI 0
Beppe

Beppe

21/11/2003

Olá. . .

Eu testei o truque que passei usando um evento do form, e não de um componente. Parece que o Delphi só permite isto na classe em que se está!

Um evento só pode receber um método, que é uma rotina dentro de uma classe, então você coloca sua procedure dentro de uma classe.

Você também pode escrever um descendente do timer que faz isso:

{ TMyTimer }

type
TMyTimer = class(TTimer)
protected
procedure Timer; override;
end;

procedure TMyTimer.Timer;
begin
if bancoy.Active and (bancoy.State in [dsBrowse]) then
bancoy.Refresh;
end;

O método Timer é que faz a ´mágica´. O certo seria chamar inherited;, mas o método herdado só chama o evento OnTimer, se tiver. Note que agora não estamos usando um evento, usamos o próprio método que despacha o evento.

Então crie uma instãncia de TMyTimer.

T+


GOSTEI 0
POSTAR