Newsgroup: it.comp.lang.delphi
Titolo: TTimer all'interno di una classe.

Ciao a tutti,
Sicuramente sono pirla io ma..dove sbaglio ?
Type
TScheda = class(Tobject)
   private
     ...
     BlinkTimer: TTimer;
     procedure TSchedaTimer(sender: TObject);
     ...
   public
     constructor Create(nsch: integer);
     ...
   end;
.
.
.
.
constructor TScheda.Create(nsch: integer);
begin
   inherited create;
   TSchedaTimer := BlinkTimer.OnTimer;  <-------
   FNumber := nsch;
end;
mi restituisce sulla riga indicata un errore di compilazione.. le ho 
provate un po tutte senza risultato.
Ovviamente, voglio che sull'evento ontimer venga eseguita la procedura 
TSchedaTimer..
Grazie per i suggerimenti...scappo..(dal dentista, sob!!!)
ZioGian

 provate un po tutte senza risultato.
L'operazioni che devi fare è l'inverso, cioè assegnare l'indirizzo del 
tuo metodo alla proprietà /OnTimer/ che è bramosa di sapere qual è il 
metodo da eseguire al verificarsi dell'evento, quindi
   InternalTimer.OnTimer := MyTimerEventMethod;
Un altro suggerimento: non utilizzare il prefisso "T" per il nome del 
metodo, poichè - per convenzione - quel prefisso si utilizza per i tipi 
in Delphi.
Ciao e buona anestesia! :-)   <drill...drill...>
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 Ciao e buona anestesia! :-)   <drill...drill...>
Speriamo che il suo dentista non sia quello del "maratoneta", con dustin
hoffman... :-D 
(per chi non se non lo
ricorda:
http://www.nostalgiacentral.com/images_movie/marathonman.JPG
)
-- 
Morde. 
ICLDweb: 
http://www2.samatel.com/icld/

Marco Breveglieri ha scritto:

Ciao,
Scusa il ritardo nella risposta..l'assestesia è andata bene, l'unico 
problema è che mi sembra di avere un pezzo di cicca al posto 
dell'otturazione... ;-)
Ho seguito il tuo soggerimento, in questo modo:
Type
TScheda = class(Tobject)
   private
     BlinkTimer: TTimer;
     ...
     procedure TSchedaTimer(sender: TObject);
     ...
   public
     constructor Create(nsch: integer);
     ...
   end;
var
   Port0, Port1, Port2, Port3: Tout;
   Port4, Port5, Port6, Port7: TIn;
implementation
constructor TScheda.Create(nsch: integer);
begin
   inherited create;
   BlinkTimer.OnTimer  := TSchedaTimer;
   FNumber := nsch;
end;
Il tutto si compila, ma ottengo un eccezione in esecuzione. Nel momento 
in cui la classe viene istanziata suppongo.
ZioGian

Magari se aggiungi un BlinkTimer := TTimer.Create funziona meglio
Ciao,
David

 David
Lo so, sono assai imbranato in sta cosa..ma potreste completare e il mio 
esempio ?
Avevo gia pensato di crearla un'istanza della classe, ma ricavandone un 
errore di incompadile types..che parametro devo passare a TTimer.create() ?
ZioGian

 David
Ok, così funziona, ma devo derivare da TComponent invece che da TObject. 
  Non che sia così importante ma mi piacerebbe capire bene questa cosa..
Oltretutto pare che le istruzioni in .Destroy non vengano eseguite. 
Perlomeno non vengono eseguite le assegnazioni in uscita (power = false 
etc..)
ZioGian
TScheda = class(Tcomponent)
   private
     ...
     BlinkTimer: TTimer;
     ...
     procedure SchedaTimer(sender: TObject);
     ...
   public
     constructor Create(AOwner: TComponent; number:integer);
     destructor Destroy; override;
     ...
   end;
...
constructor TScheda.Create(AOwner: TCOmponent; number: integer);
begin
   inherited Create(AOwner);
   BlinkTimer := TTimer.Create(self);
   with BlinkTimer do begin
     OnTimer  := TSchedaTimer;
     Enabled := false;
     Interval := 500;
     end;
   FNumber := number;
end;
destructor TScheda.Destroy;
begin
   power := false;
   OK := false;
   BAD := false;
   Fiamma := false;
   BlinkTimer.Free;
   inherited destroy;
   //fine del destructor
   end;