Newsgroup: it.comp.lang.visual-basic
Titolo: [?] misteri (per me) dell'oggetto timer

Mi sa che oggi sono inceppata mentalmente.....
perche' questa routine non mi inserisce i valori ad uno ad uno
distanziati di un secondo, dall'alto in basso nella flex,
ma tutti insieme in una frazione di secondo??
Private Sub Timer1_Timer()
y = 1
            Do
            flex1.TextMatrix(y, 1) = Date
            flex1.TextMatrix(y, 2) = Time
            flex1.TextMatrix(y, 3) = 12.6 + y
            flex1.TextMatrix(y, 4) = Round((12.6 + y), 0)
            y = y + 1
            Loop While y < 8
            Timer1.Enabled = False
End Sub
mi sa che devo farmi una cura di fosforo (online??)
--
@MARIKA@

 End Sub

 mi sa che devo farmi una cura di fosforo (online??)
No, basta una buona lettura (rilassante?): MSDN (direttamente a casa tua con
un semplce <F1>) :)
Ciao

 ha scritto nel messaggio
news:7qR_8.14725$s74.4...@twister1.libero.it...

Inserisci nell'evento Form_Load del form , dove č contenuto il timer1 il
seguente codice
Private Sub Form_Load()
    Timer1.Interval = 1000 ' mimllisecondi come specificato da Zanna
    Timer1.Enabled = True
 End Sub
e poi:
 Private Sub Timer1_Timer()
y = 1
             Do While y < 8
                 flex1.TextMatrix(y, 1) = Date
                 flex1.TextMatrix(y, 2) = Time
                 flex1.TextMatrix(y, 3) = 12.6 + y
                 flex1.TextMatrix(y, 4) = Round((12.6 + y), 0)
                 y = y + 1
             Loop


 Private Sub Form_Load()
[CUT]
Grazie a tutti per le risposte, ma forse non ho saputo descrivere l'effetto
che volevo ottenere. Entrambe le soluzioni che mia avete proposto fanno la
stessa cosa che faceva prima il mio codice e cioe':
all'avvio dell'evento timer mi spalma in un secondo tutte le otto occorrenze
nella flex, quello che volevo ottenere io era..... avvio timer, primo dato
caricato nella flex, attesa di un secondo altro dato caricato nella flex,
altro secondo di attesa e terzo dato caricato nella flex ecc. (insomma si
devono caricare i dati con ritardo di un secondo uno dall'altro e non tutti
insieme). Come faccio io (e gli esempi che mi avete postato fanno la stessa
cosa) succede che:
avvio timer ... in una frazione di secondo tutti gli otto dati caricati
nella flex... fine
beh forse non e' tanto facile come si pensi ???
by
---
@MARIKA@

 Private Sub Timer1_Timer()
e' evidente che le righe vengano caricate in un colpo solo!
con questo codice:
========
 Private Sub Timer1_Timer()
 y = 1
             Do
             flex1.TextMatrix(y, 1) = Date
             flex1.TextMatrix(y, 2) = Time
             flex1.TextMatrix(y, 3) = 12.6 + y
             flex1.TextMatrix(y, 4) = Round((12.6 + y), 0)
             y = y + 1
             Loop While y < 8
             Timer1.Enabled = False
 End Sub
========
quello che chiedi lo puoi ottenere cosi'
Private Sub Timer1_Timer()
Static y As Integer
     if y=0 then
         y = 1
     end if
     if y<9 then
             flex1.TextMatrix(y, 1) = Date
             flex1.TextMatrix(y, 2) = Time
             flex1.TextMatrix(y, 3) = 12.6 + y
             flex1.TextMatrix(y, 4) = Round((12.6 + y), 0)
             y = y + 1
     else
             Timer1.Enabled = False
     end if
 End Sub
=========
HTH
bye
R

 cosa) succede che:
.....e si ti eri spiegata male......
Togli oggetto timer dal form
 Private Sub Form_Load()
    Const PausaAttesa =   'Tempo di attesa tra eventi espresso in secondi
    Dim mytime
             mytime = Timer
             Do While Timer < mytime + PausaAttesa
                  DoEvents
             Loop
                         flex1.TextMatrix(y, 1) = Date
             mytime = Timer
             Do While Timer < mytime + PausaAttesa
                  DoEvents
             Loop
                         flex1.TextMatrix(y, 2) = Time
            mytime = Timer
             Do While Timer < mytime + PausaAttesa
                  DoEvents
             Loop
                         flex1.TextMatrix(y, 3) = 12.6 + y
             mytime = Timer
             Do While Timer < mytime + PausaAttesa
                  DoEvents
             Loop
             flex1.TextMatrix(y, 4) = Round((12.6 + y), 0)
 End Sub

 End Sub
non ho provato ma dovrebbe funzionare
ciao

 beh forse non e' tanto facile come si pensi ???
Please!!! Non diciamo belinate!
Il codice postato da MSF()..vattelapesca :-) funziona e fa cio' che hai 
chiesto  (e si capisce benissimo cio' che hai chiesto).
Nel load del form devi ovviamente abilitare il timer impostandolo come 
ti e' stato suggerito ...
Nell'evento timer metti il codice di vattelapesca ...
Dichiari, per semplificare, nel form la variabile private y ...
Prima di scrivere il codice rifletti su cosa vuoi ottenere e quali 
strumenti hai a disposizione e conosci ...
ciao
		maxx

 stessa cosa che faceva prima il mio codice e cioe':
[SNIP]
la risposta corretta e' nel messaggio di "M§F()KE®"
Se guardi bene vedrai che ha eliminato il ciclo Do e dichiarato all'esterno
la variabile di controllo Y.
Considera che l'evento Timer viene scatenato ogni tot millisecondi ed esegue
*tutto* il codice previsto; se leggi (o meglio esegui) passo-passo quello
che hai scritto vedi che, dopo il primo secondo, fai un ciclo di caricamento
di 8 elementi (molto rapido), disabiliti il timer ed esci dalla routine...
il timer in effetti ha scatenato un solo evento.
Quello che vuoi ottenere invece presuppone che l'evento Timer venga
scatenato 8 volte, a distanza di un secondo; il codioce deve essere quindi
scritto in modo da effettuare la *singola* operazione, dopo di che non devi
fare nessun ciclo ma semplicemente aspettare e verificare, con un contatore,
quando disattivare il Timer
Quindi, per riassumere quanto gia' detto nei vari messaggi
'dichiarata nelle "general" della tua form
Private Y As Integer
Private Sub Form_Load()
    Timer1.Interval = 1000 ' mimllisecondi come specificato da Zanna
    Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
    If Y = 8 Then
        'siamo arrivati al punto desiderato,
        'nessun ulteriore evento verra' generato
        Timer1.Enabled = False
    Else
        flex1.TextMatrix(y, 1) = Date
        flex1.TextMatrix(y, 2) = Time
        flex1.TextMatrix(y, 3) = 12.6 + y
        flex1.TextMatrix(y, 4) = Round((12.6 + y), 0)
        y = y + 1
        'incrementiamo e lasciamo il Timer abilitato,
        'tra un secondo verra' scatenato un nuovo evento...
    End If
End Sub
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 chiesto  (e si capisce benissimo cio' che hai chiesto).
Ooops!! Quasi ... :-(
         if y < 8 then
              flex1.TextMatrix(y, 1) = Date
              flex1.TextMatrix(y, 2) = Time
              flex1.TextMatrix(y, 3) = 12.6 + y
              flex1.TextMatrix(y, 4) = Round((12.6 + y), 0)
              y = y + 1
	else
             Timer1.Enabled = False
         end if
ciao
		maxx


Non hai letto/capito il mio post, vero? ;)
Si impegna ma non si applica :)
Ciao

 Ciao
Ti supplico illuminami

 beh forse non e' tanto facile come si pensi ???
Nella sezione dichiarazioni del Form scrivi:
Dim y As Integer
Nella Form_Load scrivi:
Timer1.Enabled=False
Nella Form_Activate scrivi:
y=0
Timer1.Enabled=True
poi:
Private Sub Timer1_Timer()
            Timer1.Enabled = False    'Il Timer non scatta finchè non ha
finito
            y = y+1
            if y>7 Then Exit Sub            'Il timer è e resta disabilitato
            flex1.TextMatrix(y, 1) = Date
            flex1.TextMatrix(y, 2) = Time
            flex1.TextMatrix(y, 3) = 12.6 + y
            flex1.TextMatrix(y, 4) = Round((12.6 + y), 0)
            Timer1.Enabled = True    'Riabiliti il Timer
End Sub

 Ti supplico illuminami
Se ti dò fuoco ti va bene lo stesso?
La "luminosità" dovrebbe bastarti per poter rileggere anche tu il mio post
invecie di dire cretinate polemiche come al solito?
call zanna.endOfThread(vbRispondiPureTantoNonTiLeggo)

 call zanna.endOfThread(vbRispondiPureTantoNonTiLeggo)
Rispondo per amor di completezza...Fai pure a meno di leggere.
Probabilmente sei troppo erudito xchè tutti ti possano comprendere.
La gente tratta un problema reale (vedi caso timer vuoi? Si?) e tu te ne
esci con
i tuoi consigli sulla lettura dell MSDN....
Non mi sembrava di essere stato polemico sul primo messaggio successivo al
tuo;
mi sembra piuttosto che tu sia polemico nei miei confronti..
ti è rimasto il dente avvelenato per il UBD  dell'altro giorno? Le scuse te
le ho gia fatte.. vatti a vedere il post.
Chiudo.

 [MEGA-CUT]
mi rispondo da sola... ho risolto in questo modo:
Public Sub Timer1_Timer()
            If y = 120 Then
            Timer1.Enabled = False
            Else
            ciclo
            End If
End Sub
Public Function ciclo()
            flex1.TextMatrix(y + 1, 1) = Date
            flex1.TextMatrix(y + 1, 2) = Time
            flex1.TextMatrix(y + 1, 3) = 12+ y
            flex1.TextMatrix(y + 1, 4) = Round((12+ y), 0)
            y = y + 1
end function
come diceva il buon Zanna non serviva una cura di fosforo ma una rilassante
(??) lettura....
anche se alle volte, specialmente in prossimita' delle agognate (e sudate)
ferie, le suluzioni sono sotto al naso ma lo sguardo volge altrove :-).
Voglio continuare a farmi del male (come diceva un bravissimo regista amico
mio eh. eh.)
chiedendovi se avete mai avuto la necessita' di "leggere" la frequenza del
segnale proveniente dal microfono e se siete riusciti a risolvere il
problema....
figuriamoci se ci riesco io
By & Thanks
--
@MARIKA@

[CUT]
Ooooops. scusate, ma per un problema al server non avevo ricevuto le vostre
risposte.....
mille scuse...
cmq ho risolto grazie a tutti
--
@MARIKA@