Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Timerin Interval *vb*

Sivun loppuun

vimme [04.01.2004 15:23:10]

#

Noobina tässä kysyn että millä saan Timerin Intervallin suuremmaksi kuin 65000ms? Tarkoituksena olisi saada siis intervalliksi 5, 10, 15 minuuttia jne. Valittelee Overflowta...

Createman [04.01.2004 15:24:11]

#

Tee normaali silmukka sopivalla hidastuksella.

Antti Laaksonen [04.01.2004 15:27:49]

#

Laita Intervalliksi vaikkapa 1000 eli sekunti ja sijoita Timeriin sisäinen laskuri. Vain laskurin tietyllä arvolla jotain erityistä tapahtuu. Sitten laskuri taas nollataan.

Private Sub Timer1_Timer()
    Static sek As Integer
    sek = sek + 1
    If sek = 120 Then
        MsgBox "Kaksi minuuttia kului!"
        sek = 0
    End If
End Sub

setä [04.01.2004 15:31:38]

#

Käytä Timer-funktiota, jota käyt testaamassa tietyin välein esim. Timerin ohjauksella. Timer tapahtumaan koodi:

If Timer - T > 60*5 Then
   ...
   ...
   T = Timer
End if

vimme [04.01.2004 15:38:26]

#

Siis tarkoituksenani on rakentaa "munakello" jossa esiasetettuna OptionButtoneilla tietyt intervallit, siis jotenkin näin:

Private Sub Option1_Click()
    If Option1.Value = True Then
        Timer1.Interval = 60000
    End If
End Sub

Tossa on siis intervallina yksi minuutti. Timerin koodiksi olen laittanut

Beep
Timer1.Enable=False

Nyt tarttis saada siis esiasetukseen se isompi kuin 65000ms jotka ainakin minulla aiheuttavat overflown tai jonkun muun errorin riippuu vähän mitä oon säätäny.

Tässä tapauksessa, jos olen oikein käsittänyt niin en voi duunata Timeriin sisäistä laskuria, olenko oikeassa?

setä [04.01.2004 15:44:34]

#

laita Timerin intervalliksi sopiva väli, esim. 1 sek. jolloin käyt tsekkaamassa aikaa. Käytä vaikka muuttujaa V(i) niinkuin viive. Timer-tapahtumassa käyt sitten silmukalla läpi kaikki vaihtoehdot. Tai tuolla Optionilla annat viiveelle halutun arvon Timerin intervallin sijasta. Asetat T = Timer ja sitten testaat Onko Timer - T > Viive

vimme [04.01.2004 16:55:08]

#

Ei tuo homma oikeen nyt aukea, täytynee vielä hieman lueskella tutoriaaleja...

setä [04.01.2004 17:20:20]

#

lainaus:

Siis tarkoituksenani on rakentaa "munakello" jossa esiasetettuna OptionButtoneilla tietyt intervallit, siis jotenkin näin:

Private Sub Option1_Click()
    If Option1.Value = True Then
        Viive = 300 '300 sek = 5 min
        T = Timer
    End If
End Sub


if timer - T > Viive Then
   Beep
   T = Timer

Nyt tarttis saada siis esiasetukseen se isompi kuin 65000ms jotka ainakin minulla aiheuttavat overflown tai jonkun muun errorin riippuu vähän mitä oon säätäny.

Tässä tapauksessa, jos olen oikein käsittänyt niin en voi duunata Timeriin sisäistä laskuria, olenko oikeassa?

Mahtoiko tulla nyt

vimme [05.01.2004 12:24:12]

#

Ei onnistunut noin, laitoin tuon

if timer - T > Viive Then
   Beep
   T = Timer

timerin koodiin, nyt piippaa sekunnin välein. Viiveeksi asetin 60. Niin ja Timerin intervallina on 1000.

Antti Laaksonen [05.01.2004 12:35:37]

#

Viive ja T täytyy määritellä yleisiksi muuttujiksi, koska muuten niiden sisältö katoaa aliohjelmien välissä. Kirjoita aivan formin alkuun, (General), (declarations) -kohtaan:

Dim Viive As Integer, T As Single

Toimiva koodi Timer1:seen on tässä (Interval täytyy olla 1000 ja Option1_Click tapahtunut):

Private Sub Timer1_Timer()
    If Timer - T > Viive Then
        Beep
        T = Timer
    End If
End Sub

vimme [05.01.2004 13:16:17]

#

Joo, nyt se toimii, ainoa vaan että täytynee intervallia Timeristä pienentää kun tuo kello edistää muutoin. Minuutti ei ole minuutti vaan 47 sekuntia.

vimme [05.01.2004 14:31:23]

#

Voisiko Antti tai setä nyt selittää mitä nuo rivit oikein tekee.

if timer - T > Viive Then
  Beep
  T = Timer
End If

Hieman tuo aiheuttaa mietintää kun T on määritelty jo Timeriksi Option_1_Click()ssä... Ääh, ei oikein ajatus kulje yövuorojen jälkeen...

hunajavohveli [05.01.2004 16:06:35]

#

Tuo pelaa sillä lailla, että Timer - T kertoo erotuksena kuinka kauan on kulunut viime kerrasta.

Jos vaikka keskiyöstä on kulunut 10000 sekuntia niin T saa tuon arvon ja seuraavalla kerralla sekunteja on kulunut 10005. Silloin T:n ja nykyisen Timerin erotus on 5. Eli on kulunut 5 sekuntia ja jos tuo 5 sekuntia on suurempi kuin viive, mikä täytyy odottaa, suoritetaan tominto ja asetetaan T:hen nyt se nykyinen 10005, joka seuraavalla kerralla taas vaihtuu 10010, 10015 jne... Toivottavasti osasin selittää. (toivon varaan jää :))

vimme [05.01.2004 19:51:46]

#

Thx hunajavohveli, ymmärsin kyllä. Itseasiassa päiväunetkin taisi auttaa hieman asiaa.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta