Noobina tässä kysyn että millä saan Timerin Intervallin suuremmaksi kuin 65000ms? Tarkoituksena olisi saada siis intervalliksi 5, 10, 15 minuuttia jne. Valittelee Overflowta...
Tee normaali silmukka sopivalla hidastuksella.
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
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
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?
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
Ei tuo homma oikeen nyt aukea, täytynee vielä hieman lueskella tutoriaaleja...
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 = TimerNyt 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
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.
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
Joo, nyt se toimii, ainoa vaan että täytynee intervallia Timeristä pienentää kun tuo kello edistää muutoin. Minuutti ei ole minuutti vaan 47 sekuntia.
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...
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ää :))
Thx hunajavohveli, ymmärsin kyllä. Itseasiassa päiväunetkin taisi auttaa hieman asiaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.