Avatar billede elbjerg Nybegynder
21. oktober 2000 - 15:28 Der er 11 kommentarer og
1 løsning

TNotifyEvent til TTimer.OnTimer

Nedenståden kode viser hvad jeg gerne vil. (Jeg bruger desværre ikke objekter, det ville unægtelig have gjort det nemmere.) Jeg mangler det koder der fortæller \'timer.OnTimer\' hvilken procedure den skal kalde.

...

procedure timerAction;
begin
  // do something...
end;


initialization
  timer:=TTimer.Create(nil);
  timer.Interval:=60000;

  timer.OnTimer:=  // skal kalde timerAction

...
Avatar billede lrj Nybegynder
21. oktober 2000 - 17:52 #1
Den skal vist være deklereret som

procedure timerAction(Sender: TObject);
begin
  // do something...
end;

for at du kan bruge den.
Avatar billede hatecaps Nybegynder
21. oktober 2000 - 20:31 #2
jeps, TTimer.OnTimer er defineret som en standard TNotifyEvent, med (Sender : TObject) som parameter. Så hvis du gør som lrj siger, skulle det virke

ha\' det godt
hatecaps :-)
Avatar billede lrj Nybegynder
21. oktober 2000 - 20:35 #3
Så var det et svar :)
Avatar billede hatecaps Nybegynder
21. oktober 2000 - 21:10 #4
lol , det var bedre ! ;-)
Avatar billede lrj Nybegynder
21. oktober 2000 - 21:29 #5
Yearh :)
Avatar billede lrj Nybegynder
21. oktober 2000 - 22:06 #6
Virker det ikke?
Avatar billede hatecaps Nybegynder
21. oktober 2000 - 22:14 #7
hmm, måske har serveren spist hans begrundelse.. 
Avatar billede sjensen Nybegynder
22. oktober 2000 - 11:27 #8
du skal bare skrive:

timer.ontimer := timerAction;

Så sætter du eventen til.

timer.ontimer := nil; slår den fra igen.

Disse 2 svarer til i design/events at oprette/slette ontimer eventen.

Om du har (sender : tobject) med som parameter i TimerAction procedurer er ikke vigtigt. Det er afhængigt af hvad du laver i proceduren. Den vil virke fint nok uden.
Avatar billede elbjerg Nybegynder
22. oktober 2000 - 11:41 #9
Det var det jeg prøvede i starten. Men der kommer noget brok om at \'method pointer\' og \'regular procedure\' er \'incompatible\'. Som jeg ser problemet skyldes det type erklæringen af TNotifyEvent: procedure ... of object; hvor of object gør at den foretrækker(!) at timeren og proceduren er lagt på samme klasse( eks. TForm ).
(PS. Jeg undskylder til de to herrer der savner mit svar, man er vel rookie.)
Avatar billede lrj Nybegynder
22. oktober 2000 - 11:46 #10
:)

Du kunne så gøre følgende, hvis ikke du vil bruge timeren i et objekt:

type
myTimer = class (TTimer)
  procedure MyTimerAction(sender: tobject);
  constructor myCreate;
end;

implementation

constructor mytimer.mycreate;
begin
  inherited create(nil);
  ontimer := mytimeraction;
end;

Mon ikke det skulle kunne gøre tricket?
Avatar billede elbjerg Nybegynder
22. oktober 2000 - 12:14 #11
OK, vi accepterer ( selvom jeg helst ville have undgået klassen, men jeg blev stemt ned ). Mange tak for hjælpen.
Avatar billede lrj Nybegynder
22. oktober 2000 - 12:52 #12
Tak :)

Problemerne du har haft hænger vist sammen med at eventhandlers skal sidde på objekter, som du også selv har fundet ud af. En indbygget \"feature\" i Delphi. Men det er nu meget smart, for så kan du have flere objekter som har hver deres handler som ikke behøves opføre sig helt ens. Så måske er det ikke så dumt endda.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester