Newsgroup: it.comp.lang.delphi
Titolo: TTimer

Ciao a tutti!
Vorrei fare in modo che una mi a  applicazione potesse mostrare un messaggio
ad un'orario deciso dall'utente.
L'unica cosa a cui le mie scarse capacita' di programmazione mi fanno pnsare
e il TTimer. Si puo' fare?
Per cominciare ho pensato di provare a farmi mostrare un messaggio ad un
certo intervallo; questo e' il codice che pero' non mi funziona:
procedure tmainform.nuovotimer(sender:tobject);
var mytimer:ttimer;
begin
mytimer:=ttimer.create(mainform);
mytimer.ontimer:=ontimerq;
mytimer.interval:=6000;
mytimer.enabled:=true;
end;
e poi:
procedure tmainform.ontimerq(sender:tobject);
begin
showmessage('timer');
end;
Dove sto sbagliando?
Grazie mille
Andrea

Io uso delphi 6 pro e questo codice mi gira se prelevo dalla component
palette (nella terza pagina System il componente Timer)
e lo metto sulla form.
procedure TForm2.FormActivate(Sender: TObject);
begin
Timer1.Interval := 6000 ;
Timer1.Enabled := True ;
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
 ShowMessage ('Ciao') ;
end;
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio
news:151Z26Z198Z233Y...@usenet.libero.it...


 richieda meno memoria e sia piu' compatta come codice...
Il fatto e' che devi saper programmare "coscienziosamente" per poter
fare quello che vuoi fare.
Il tuo codice contiene un memory leak dovuto all'impossibilita di
eliminare il componente timer una volta creato (il riferimento esce
fuori dalla visibilita').
Per realizzare quello stai cercando di fare, una specie di sveglia o
gestore di appuntamenti, e' preferibile utilizzare un thread separato a
bassa priorita'.
Questo thread provvedera' a verficare ogni x secondi (o minuti) se
esistono in coda eventi da segnalare all'utente e quando questo avviene
provvedera' ad avviare l'azione relativa.
Per attendere x secondi (o minuti) puoi utulizzare la funzione sleep.
-- 
I am what I am, I do what I can
Cerchi un programmatore PHP/MySQL? 
http://url.repository.biz/go/1Y
L'uomo, conscio di sbagliare, persevera.

Ciao!
Ti ringrazio molto della risposta.
In effetti mi ero resto conto del fatto che non potevo disallocare la
memoria come tu mi segnali ma mi ero riproposto di pensarci nonappena la
questione avesse funzionato.
Di tread per il momento non ne so niente, ma e' un'ottima occasione per
studiarli.
Grazie dei consigli!
Andrea
"Setec Astronomy" <setec@_NO_NOSPAM_freemail.it> ha scritto nel messaggio
news:MjG4c.69354$FJ6.2...@twister1.libero.it...


> Dove sto sbagliando?
la variabile mytimer deve essere definita tra le "private" della unit. Tu
l'hai dichiarata come locale ad una procedura, e questo e' un errore logico.
All'uscita della procedura, infatti, la memoria dell'oggetto non viene
liberata, e l'oggetto non e' comunque utilizzabile dalle altre procedure.

 end;
Che ne pensi?
Ciao,
--
Davide

Questa è la Unit completa per creare Run-Time l'istanza Timer.
Il problema è come chiamare le successive visto che non le puoi nominare a
caso.
Notare che nelle Uses ci deve essere ...ExtCtrls... dove viene definito
tTimer.
Inoltre ...procedure TimerOnTimer(Sender: TObject); ... definisce il nume
del metodo che si usa per la 'sveglia'.
e ... private Timer : tTimer ; ... definisce il tipo che andremo a creare o
meno durante l'esecuzione.
Fammi saper
Ciao
Mario
...
...
unit uTimerCreate;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,
  ExtCtrls; // dove viene definito tTimer
type
  TfTimerCreate = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure TimerOnTimer(Sender: TObject); // Definizione del metodo
  private
    Timer : tTimer ;
    { Private declarations }
  public
    { Public declarations }
  end;
var
  fTimerCreate: TfTimerCreate;
implementation
{$R *.dfm}
procedure TfTimerCreate.FormCreate(Sender: TObject);
begin
  Timer := tTimer.Create(Self) ; // Creazione dell'istanza
  Timer.Enabled := True ; // Abilitazione
  Timer.Interval := 6000 ; // Definizione di intervallo di tempo pari a 6
secondi
  Timer.OnTimer := TimerOnTimer ;// Definizione del metodo(Sveglia)
end;
procedure TfTimerCreate.TimerOnTimer(Sender: TObject);
Begin
  Caption := Caption + ' X' ;
End ;
end.
