Newsgroup: it.comp.lang.visual-basic
Titolo: conto alla rovescia

Ciao a tutti ,
Ho impostato una variabile  numero secondi in un modulo , poi ho usato la 
funzione Timer impostata a intervallo 1000 ed ho scritto il seguente codice
Private Sub Timer1_Timer()
NumSecondi = NumSecondi + 1
LblMessaggio.Caption = Str$(NumSecondi)
End Sub
Tutto ok , ma ho anche provato a fare cosě
Private Sub Timer1_Timer()
NumSecondi = 40
NumSecondi = NumSecondi -1
LblMessaggio.Caption = Str$(NumSecondi)
End Sub
Ma non funziona . Dove sbaglio ????
Grazie 

 End Sub
Tutte le volte che richiami il Timer,
NumSecondi ritorna 40
Dim NumSecondi As Integer
Private Sub Timer1_Timer()
    If NumSecondi = 0 Then NumSecondi = 40
    NumSecondi = NumSecondi - 1
    Label1.Caption = Str$(NumSecondi)
End Sub
-- 
----------------------------
Mauro Gamberini

 End Sub
... oppure, più semplicemente:
Dim NumSecondi As Integer
Private Sub Form_Load()
    NumSecondi = 40
End Sub
Private Sub Timer1_Timer()
    NumSecondi = NumSecondi - 1
    Label1.Caption = Str$(NumSecondi)
End Sub
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

... oppure, addirittura:
Dim NumSecondi As Integer
Private Sub Timer1_Timer()
    NumSecondi = NumSecondi + 1
    Label1.Caption = Str$(40 - NumSecondi)


 End Sub
Mi aggancio qui per chiedere una cosa di programmazione in generale che 
non ho mai capito fino in fondo.
Se non sbaglio la soluzione di dichiarare una variabile globale (a 
livello di modulo) per poter mantenere in memoria il valore assunto ad 
ogni chiamata di una funzione è implementabile anche usando variabili di 
tipo static dichiarate localmente nella funzione stessa.
Ma come si usa questo tipo di variabili? In che modo vengono allocate in 
memoria e come si gestisce l'inizializzazione?
Grazie!
Marco / iw2nzm

 memoria e come si gestisce l'inizializzazione?
Funzionano esattamente come variabili globali, ma sono visibili solo 
all'interno della sub.
Puoi dichiararle come
static pippo as integer
pippo = 40
...
La volta dopo che rientri nella sub pippo avrà mantenuto il suo valore.
Il loro utilizzo è piuttosto controverso in quanto sono a tutti gli effetti 
variabili globali con visibilità limitata.
Ciao

 ha scritto nel messaggio 
news:4396a444$1...@x-privat.org...


Scusatemi ancora , ma vorrei capire quesyo codice
NumSecondi = NumSecondi + 1
  Labeltempo.Caption = Str$(10 - NumSecondi)
Allora , dopo aver impostato la Variabile
Public NumSecondi As Byte  nel modulo
assegno il valore alla stessa con questa istruzione
NumSecondi = NumSecondi + 1
ovvero Numero di secondi  è Uguale allo stesso + 1 quindi numero di secondi 
è uguale a  0 (il valore Iniziale di timer +1)
quindi variabile = a 1
Come fa quindi ad incrementarsi  senza un ciclo for .... next ?
proseguendo
Label1.Caption = Str$(40 - NumSecondi)
Vado a scrivere nella label 1 in Caption il valore 40 - Numsecondi
ora se ho il valore 1 nella variabile diventa 40 -1
ed il ciclo dove sta ?
la routine qui finisce ed esce con un end sub
Grazie

 Come fa quindi ad incrementarsi  senza un ciclo for .... next ?
E' il timer a effettuare il ciclo.
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
Se i tempi non chiedono la tua parte migliore, inventa altri tempi. 
(Baolian, libro II, vv. 16-17)
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Dunque, mi sembra che non hai ben chiaro il funzionamento del controllo
Timer.
Se scrivi:
Private Sub Timer1_Timer()
    Beep
End Sub
il pc fa un beep ogni 1000 millisecondi, cioè il valore che hai impostato
per la proprietà Interval. Questo codice viene eseguito di nuovo ogni volta
che è passato il tempo impostato in Interval. Ogni 1000 millisecondi, ogni
secondo si scatena l'evento Timer del controllo Timer1, e viene eseguito il
codice nella sub dell'evento. Ogni secondo. Chiaro fin qui?
Ora, se tu assegni un valore ad una variabile dentro questa routine, questa
variabile sarà riportata a quel valore ad ogni evento Timer, cioè ad ogni
secondo. Per questo la variabile deve essere inizializzata all'esterno della
routine.
Il tuo codice iniziale non funzionava perché tu assegnavi il valore alla
variabile DENTRO LA SUB, cioè ogni secondo la reimpostavi a 40 anche se era
già diventata 39. Perciò non andava. Invece nel codice che hai scritto per
mandare avanti l'orologio, e anche nel mio, la variabile viene inizializzata
fuori dalla sub evento: infatti non le viene mai assegnato direttamente un
valore, quindi parte da zero. E l'evento Timer non assegna un valore
iniziale alla variabile, ma si limita a modificare di volta in volta quello
già raggiunto. Così la variabile può mantenere il valore già ottenuto fino
all'evento Timer successivo, cioè tra altri 1000 millisecondi. Come vedi non
serve nessun ciclo.
Spero di essere stato utile. Ciao.
PS. questo messaggio farà esplodere il tuo computer tra 1000 millisecondi.
9;o)


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

Ma dove sto sbagliando in questo codice
Private Sub Timer1_Timer()
Beep
NumSecondi = NumSecondi + 1
  Labeltempo.Caption = Str$(7 - NumSecondi)
  If NumSecondi = 0 Then
Timer1.Enabled = False
End If
   End Sub
Il timer non si ferma e continua con il conteggio oltre lo Zero e quindi fa 
meno 1 meno 2 ecc


abbi pazienza ma hai letto quello hai scritto?
NumSecondi = NumSecondi + 1
qui' incrementi la variabile che *parte* da 0 e diventa 1
    If NumSecondi = 0 Then
qui testi se e' uguale a zero, ma come fa ad essere 0!
prova a scrivere:
    If NumSecondi = 7 Then
se stai imparando a programmare il mio consiglio e' quello di sforzarti 
a trovare le soluzioni da solo, perche' quando riesci a risolvere un 
problema sai come risolverlo anche un'altra volta. ;-)
bye
r


Devi scrivere
    If NumSecondi = 7 Then ....
Riguardo al sito, non è mio, anche se io ne sono un frequentatore assiduo.
Purtroppo non penso che sarà possibile tradurlo in italiano perché i
frequentatori sono di ogni parte del mondo. Comunque c'è anche una sezione
"Non-english" in cui puoi postare anche in valdostano (se c'è qualcun altro
che lo capisce e ti risponde...)
Mi interessa sapere cosa non hai capito del database, e quale dei due mdb
non ti è chiaro (ti eri accorto che, anche se si chiamano con lo stesso
nome, in realtà sono due file diversi, vero?!). Sai, l'mdb è mio e lo posso
anche tradurre in italiano.
Fammi sapere.


Per Yronium
Ho scaricato il secondo database , quello che ha in se la fase di 
randomizazione.
L'ho caricato con Access 97 e subito il prg mi ha chiesto se volevo 
convertirlo cosa che ho fatto.
Poi ho guardato la struttura del db e ho trovato solo una tabella  con 3 
campi una di indicizazione numerata progressivamente , una con le domanda 
con all'interno lettere alfanumeriche (a, z f...ecc) e per ultimo un campo 
dove dovrebbero essere messe le risposte giuste completamente vuoto.
Inoltre ho trovato la struttura del form con etichette di domanda e risposte 
anche queste vuote
ed una query Vuota.
poi Niete altro.
Non ho capito se questo db è da finire secondo le proprie esigenze o se 
nella conversione iniziale si è perso qualcosa.
Ci@o
Sail

 o se nella conversione iniziale si è perso qualcosa.
Probabilmente è andata proprio così. Comunque, se preferisci te lo invio
dove vuoi tu, in formato Access2000 (è la versione che uso io) o Access97
(ce l'ho al lavoro). Fammi sapere.
PS. quando vuoi, scarica anche l'altro, mi interessa sapere cosa ne pensi.
Uno screenshot è dentro il thread di discussione.


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

 ecco dove spedirlo
[...CUT...]
Fatto. Hai posta.


Per Yronium
Hai Posta