Eli ongelma on sarjaportissa ole tulostin, jolle pitää syöttää jokainen datarivi hitaasti.
Tämä ei tietenkään toimi, mutta miten tätä voisi hidastaa niin, että jokainen listboxin rivi luettaisiin kerran 500ms:ssä ja pukataan mscomm1:lle?
Private Sub Timer1_Timer()
For i = 0 To List1.ListCount
MSComm1.Output = List1.List(i)
Next i
vaipitääkö tämä hoitaa jotenkin "manuaalisesti"? Eli lasketaan montako riviä on listboxissa ja sitten, joka kerta kun timer toimii niin luetaan seuraava rivi? Millä tuon listboxin mitan saisi esille?
End Sub
Muistaakseni VB:ssä on SLEEP(millisekunnit) funktion.
[edit]
N. 5 sek. kestäneellä googlauksella löysin tämän.
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As long) Sleep 5000
Lisää silmukan sisälle toinen silmukka, joka tarkastaa, että edellinen data on lähetetty, ennen kuin lähettää uutta.
Sub Laheta() For i = 0 To List1.ListCount MSComm1.Output = List1.List(i) Do Loop Until MScomm1.OutBufferCount = 0 Next i End Sub
Jos haluat asian hoitaa tuolla Timer-objektilla, joka on esimerkissäsi (koodi-tagit!?), niin aseta sen Interval-muuttuja arvoon 500, jolloin se ajetaan 500 ms:n välein. Koodiksi seuraava...
Private Sub Timer1_Timer() Static i As Integer 'static-muuttuja muistaa arvonsa niin kauan, kuin ohjelma on päällä If i > List1.ListCount Then 'onko kaikki rivit jo lähetetty? Timer1.Interval = 0 'sammutetaan Timer i = 0 'nollataan laskuri Exit Sub End If MSComm1.Output = List1.List(i) 'lähetetään rivi i = i + 1 'kasvatetaan laskuria End Sub
Ok, kiitos! Nyt toimii hienosti!
Aihe on jo aika vanha, joten et voi enää vastata siihen.