Newsgroup: it.comp.lang.delphi
Titolo: Timer. Cosa sbaglio?

ciao a tutti,
devo fare un contatore con una label; metto questo codice in un timer, ma
non funziona.
Cosa sbaglio?
procedure TForm1.Timer1Timer(Sender: TObject);
var PUNTI: Variant;
begin
 PUNTI:=0;
 PUNTI:=PUNTI + 1;
 label.caption:= PUNTI;
end;
Grazie

 ha scritto nel messaggio
news:g6Qr6.15565$6W.9...@news.infostrada.it...

Ma perchč Variant? Č un particolare processo? Cmq o fai cosi:
procedure TForm1.Timer1Timer(Sender: TObject);
 var
  PUNTI: Int64;
 begin
  PUNTI:=0;
  PUNTI:=PUNTI + 1;
  label.caption:= IntToStr(PUNTI);
 end;
o fai cosi:
 procedure TForm1.Timer1Timer(Sender: TObject);
 var
  PUNTI: Variant;
 begin
  PUNTI:=0;
  PUNTI:=PUNTI + 1;
  label.caption:= VarToStr(PUNTI);
 end;
In tutti e due i casi devi eseguire la conversione del valore di partenza
(Integer o Variant) nel valore di arrivo (String) con le opportune funzioni.
Ciao

 ha scritto:

lasciami indovinare... ti esce sempre 1!! 8)
togli l'inizializzazione Punti:=0; all'interno dell'evento
e usa una variabile globale e non locale all'evento
ps: perche' variant? Benche' sia una feature di Delphi molto potente
in questo caso e' uno spreco, io userei un semplice integer o byte...
lo "sforzo" ;) che devi fare e' convertirlo in stringa
l.caption := IntToStr(Punti)
Ciao,
Alan Solo

 variabile globale
ok ok, mi correggo, le variabili globali fanno schifo ;)
potresti usare la proprieta' Tag del Timer...
Ciao,
Alan Solo

> lasciami indovinare... ti esce sempre 1!! 8)
Mah! penso anch'io!!!
--
AmMaT
m   w
M   a
a   i
TwAiN

ok ok, mi correggo, le variabili globali fanno schifo ;)
Ciao Alan,
se non erro un pň di tempo fa hai postato un esmpio (credo sia atato
propri tu) su come creare una classe invece di una variabile globale.
Siccome allora non ci capivo un cactus con Delphi (adesso non č che
faccio miracoli eh!!!) ma insomma adesso sono un pň piů esperto.
Anche grazie al newsgroup chiaramente!!!!!!
Quindi, se hai ancora quell'esempio, che non riesco piů a reperire,
potresti ripostarlo di nuovo sul newsgroup?
Grazie.
P.S. Ovviamente se anche qualcun'altro avesse esempi pratici sarebbero
ben graditi.
Ciao
Robin

corso del programma.
E allora chiamiamole variabili in ambito di classe (class scope). Sei
contento adesso?  
Che palle ragazzi, adesso mi ricordo perché mi ero stufato di
frequentare i newsgroup di programmazione italiani anni orsono.
-- 
"Ciao Rex, che cavolo di situazione eh? Due dentro, due fuori, puo' succedere di tutto!"

possibile su un CONST ??
Sulle const tipizzate si'.
E' l'ennesima ambiguita' dell'Object Pascal.
--
Andrea Laforgia (ICQ 87230455)
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

 questa non la sapevo... mi fido perche' non la posso provare... ;)
acciderbolina (??)... funziona! le CONST tipizate non le avevo mai sentite,
grazie per il suggerimento
Ciao,
Alan Solo

 sfuggita. Ottimo lavoro!
grazie, grazie... gli autografi dopo vi prego... ;PP
ma siccome sono autolesionista ti dico che sembra ottimizzata perche' e'
tutta compatta in una istruzione (riga) ma in realta' ci sono due
chiamate a conversioni che la rendono meno veloce delle altre proposte...
sto diventando paranoico vero? 8)
Ciao,
Alan Solo

TwAiN
AAAARGH!!!
Grazie mille! :)
--
AmMaT
m   w
M   A
a   i
TwAiN

 variabile globale alla classe è la cosa più veloce.
chiaro, ti do ragione, in questo caso possiamo dire che e' quasi ridicolo
usare una soluzione di queso genere, il mio era un esempio che potremmo
definire "accademico", nella pratica per una cosa del genere avrei usato
una varibile globale (adesso una variabile const tipizzata, grazie
Paolo ;) ... se hai notato ho risposto di getto var globale e poi mi sono
corretto (quasi ironicamente) ;)
Ciao,
Alan Solo

 Sulle const tipizzate si'. E' l'ennesima ambiguita' dell'Object Pascal.
infatti questa ambiguita' non e' che mi piaccia molto, peccato ...
ps: mi dici le ambiguita' dalla 1 alla n-1? ;)
Ciao,
Alan Solo

 e usa una variabile globale e non locale all'evento
Perche' non usare una const tipizzata?
(equivalente ad una static locale del c?)
procedure TForm1.Timer1Timer(Sender: TObject);
const Counter: Cardinal = 0;
begin
    Label.Caption := inttostr(Counter);
    inc(Counter);
end;
Saluti
Paolo Arosio

 Alan Solo
In Object Pascal non esiste nessun modo per imitare static del c/c++?

 end;
questa non la sapevo... mi fido perche' non la posso provare... ;)
cmq non sono tanto convinto, l'inc (ovvero la modifica) e'
possibile su un CONST ??
cmq, visto che ne abbiamo dette di tutti i colori ;) :
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Label1.Caption := IntToStr( StrToInt(Label1.Caption) + 1 );
end;
Ciao,
Alan Solo

In Object Pascal non esiste nessun modo per imitare static del c/c++?
No.
Esiste un modo per i metodi delle classi, usando la keyword "class"
davanti al nome del metodo.


 avesse esempi pratici sarebbero ben graditi. Ciao Robin
semplicemente le var globali sono sconsigliate perche' sono modificabili
in qualsiasi punto del programma senza nessun controllo, e' consigliabile
creare dei membri di classe con relativi Setters e Getters, anche per un
fatto di un piu' semplice mantenimento del programma...
ti faccio un es. su l'argomento del thread:
TForm1 = class(TForm)
    Label1: TLabel;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    FContatore: integer;
    procedure SetContatore(AContatore: integer);
    function  GetContatore: integer;
  public
   property Contatore: integer read GetContatore write SetContatore;
  end;
var
  Form1: TForm1;
implementation
procedure TForm1.SetContatore(AContatore: integer);
begin
 FContatore := AContatore;
 Label1.caption := IntToStr(FContatore);
end;
function TForm1.GetContatore:integer;
begin
 Result := FContatore
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Contatore := Contatore + 1
end;
Ciao,
Alan Solo

Grazie Alan,
credo di aver capito l'esmpio, ma se si trattasse di una stringa la
procedura č simile?
In ogni caso credo si di!!!
Ciao
Robin


l'utilizzo di una variabile globale alla classe è la cosa più veloce.
Non esiste il concetto di "variabile globale alla classe".
Le variabili globali sono quelle che hanno life-time lungo quanto il
corso del programma.
--


end;
Caspita, ottimizzazione all'ennesima potenza... questa mi era proprio
sfuggita. Ottimo lavoro!
CIAO.
/|/|_Bozzy_|\|\

end;
E' vero pero'  che  *a mio parere* non bisogna neppure esagerare...
l'esempio che fai e' ok in quanto decidi di fare un update su una
label, ma se si trattasse semplicemente di usare un contatore
l'utilizzo di una variabile globale alla classe è la cosa più veloce.
potrei fare 
private
  property Contatore: Integer read FContatore write FContatore;
ma alla fine faccio 
private
  Contatore: Integer;
Ciao, 
Massimo.


end;
ehi! funziona!
--
AmMaT
m   w
M   a
a   i
TwAiN

 ha scritto nel messaggio
news:98r38p$37jp9$1...@ID-44131.news.dfncis.de...


TwAiN
/|/|_Bozzy_|\|\


Non e' che sia cosi' diverso dalle const del C (per quel che ricordo) (e
=>, se non mi sbaglio, del C++ usato come fosse C).
Saluti
Paolo Arosio

=>, se non mi sbaglio, del C++ usato come fosse C).
No.
Le const in C non sono affatto modificabili.
Non sono da considerare vere e proprie costanti, nel senso che non
possono essere usate, per esempio, per costituire la dimensione degli
array.  In C++ lo specificatore "const" introduce vere e proprie
costanti.


sto diventando paranoico vero? 8)
Nooooooooooooo... =)
CIAO.
/|/|_Bozzy_|\|\

frequentare i newsgroup di programmazione italiani anni orsono.
Perche' sbagliavi i termini ?
Dai, per cosi' poco ?


Dai, per cosi' poco ?
No, per le persone che come te si attaccano alle virgole, che
spulciano i messaggi per trovare gli errori e far vedere agli altri
che sono piu' bravi. Non so tu, ma io normalmente lavoro e non ho le
ore da dedicare a queste cose (che scrivo di corsa senza stare li poi
dei quarti d'ora a controllare forma e contenut)i. Se il senso di un
discorso si capisce, bella li, chissenefrega se uno scrive
eccezzzionale o scrive variabile globale in ambito della classe (che
sappiamo tutti e due che non esiste) invece di variabile locale; era
chiaro cosa intendessi dire. Ora, visto che e' qualche lustro che
faccio questo cavolo di lavoro e penso di avere qualche anno in piu'
di *esperienza* (non parlo di capacita') di molti frequentatori del
gruppo pensavo potessi essere utile nei settori che mi sono piu'
familiari.
Poi, pero', se devo perdere il mio tempo per simili stupidate
preferisco starne fuori.
Massimo.


 costanti.
Sul fatto che il mio compilatore rifiuti il primo esempio qua sotto
siamo d'accordo.
Rimane pure il fatto che compila il secondo
(in Dos me lo esegue pure (BC 3.1); in Win32 no (Mingw))
Io chiamo il secondo esempio "modifica del valore di una const".
L'opportunita' di questo tipo di operazioni e' opinabile.
// non compila
...
const int UnCentinaio = 100;
...
int main()
{
    UnCentinaio = 101;
    printf("UnCentinaio vale %d", UnCentinaio);
    return 0;
}
// compila
...
const int UnCentinaio = 100;
...
int main()
{
    *(int *)&UnCentinaio = 101;
    printf("UnCentinaio vale %d", UnCentinaio);
    return 0;
}
Saluti
Paolo Arosio

 ps: mi dici le ambiguita' dalla 1 alla n-1? ;)
devo dedurre che n=1 ?
Ciao,
Alan Solo