Använd timern i ditt program
Förord
En så enkel sak som att göra en klocka eller att göra en räknare som visas i ett textfält eller en label kan vara trixigt om man aldrig provat. Här följer därför ett snabbt exempel på hur det går till. Du kan även ladda hem exempelprogrammet. En länk finns nedan.
Vilka kontroller behöver vi?
Börja med att skapa ett nytt vb-projekt och lägg dit en textbox, en label och ikonen som ser ut som ett tidtagarur - dvs timern. Nu har du de grundläggande delarna som behövs för att göra något.Börja med att högerklicka och välja egenskaper på timern. En egenskap kallas .Interval. Denna parameter kan du fylla på med hur ofta timern skall köras. Det kan vara allt från 1-60000. Tiden du anger är alltså millisekunder. Så om du skriver exempelvis 600 så körs timern varje sekund. I vårat fall räcker det med var 3:e sekund så vi skriver där 1800.
Testa vad som händer
Genom att nu klicka på timern så får vi fram kod för denna. Vi kastar in en messagebox bara för att se om något händer var 3:e sekund
Private Sub Timer1_Timer()
MsgBox "hej"
End Sub
Testa nu programmet genom att trycka F5 så skall du få ett meddelande hej var 3:e sekund. För att avsluta programmet trycker du på stopp-knappen så går vi vidare.
En räknare
Om vi vill fylla textboxen med en räknare som går från 1 och uppåt ända tills du vill stanna programmet får vi först lägga in en variabel som vi inte tappar bort så därför lägger vi den överst i formuläret och kallar denna för exempelvis raknare.
Private raknare As Integer
Private Sub Timer1_Timer()
raknare = raknare + 1
MsgBox "hej " & raknare
End Sub
Det som händer nu är att messageboxen kommer skriva hej 1, hej 2, hej 3 osv. Vi flyttar därmed bort messageboxen och fyller vår textbox med detta istället.
Private raknare As Integer
Private Sub Timer1_Timer()
raknare = raknare + 1
Text1.Text = raknare
End Sub
Som du ser om du kör programmet så uppdateras textboxen var 3:e sekund med en siffra. Det du kan göra nu är att ändra interval till 600 igen, då händer detta varje sekund.
Så avslutar vi med tiden
Private raknare As Integer
Private Sub Timer1_Timer()
raknare = raknare + 1
Text1.Text = raknare
Label1.Caption = Now
End Sub
Nu har vi kommit så långt att vi har en liten snurra igång. Dock kanske vi vill att vår timer skall startas om, nollställas och liknande.
Du kan lägga till tre stycken knappar och på dessa välja följande:
Private Sub Command1_Click()
' reset
raknare = 0
End Sub
Private Sub Command2_Click()
' stoppa timern
Timer1.Enabled = False
End Sub
Private Sub Command3_Click()
' starta timern
Timer1.Enabled = True
End Sub
Starta vid ett visst tillfälle
I samma subrutin som timer-eventet uppstår kan vi nu även känna av om vi exempelvis bara en gång per dygn vill köra något och den övriga tiden låta programmet ligga i dvala. Då får du helt enkelt jämföra den aktuella tiden med din föreslagna tid och kontrollera i fall de överstämmer.
Private Sub Timer1_Timer()
If Now() => "17:21:15" Then
Msgbox "Nu skall vi meddela något"
End Sub
End Sub
Det här är en väldigt grov presentation av hur man bör göra, men principen är densamma oavsett om det är ett enkelt eller avancerat program. I vissa fall kanske man har en tabell eller inifil för att kontrollera vilket värde det är man skall jämföra med. I andra fall kanske man även skall "bocka av" att man gjort något så det inte görs igen. Det finns som sagt var många varianter.
Hämta programmet
Du kan hämta hem det lilla programmet genom att klicka här. Om du inte har vb6 installerat så kan du först köra och testa när det är installerat. Det finns även en gratisversion av VB5 att hämta hem, se blandat arkiv/servicepacks för mer information.Jag hoppas nu du fått en liten inblick i att arbeta med timern för att bygga egna program där något skall ske på intervall. Man kan faktiskt bygga rätt avancerade program med detta enkla hjälpmedel. Ta ett sådant exempel att man hämtar program eller filen från en viss katalog på ett visst intervall, flyttar filerna eller ftp:ar dom till en server - alla möjligheter finns. Det är bara fantasin som sätter stopp på vad som går att göra. Lycka till.
Simon Dahlbacka
sedan när går det 600 millisekunder på en sekund? Det är ju en "contradiction in terms" i och med att milli=tusen.
Roger Alsing
som redan påpekat , det går väl iaf 1000 millisekunder på en sekund. och dessutom så kör windowsforms timern via ett wm_timer message i wndprocen och det avfyras med 13 millisekunders mellanrum , så alla intervall under 13 millisekunder gör ingen skillnad.
Jonas Rembratt
Är du verkligen säker på att det är 13ms fortfarande. Jag vill minnas att introduktionen av DirectX i operativet betydde en mer högupplöst timer. Det var flera år sedan jag pysslade med dessa frågor (spelprogrammerade ett tag) men jag tror Windows nuvarande timer är snabbare.
Jonas Rembratt
Jag skrev en liten testapplikation för att kolla det reella intervallet och, med testkodens overhead, hamnade jag konsekvent på 15ms. Jag mindes fel helt enkelt: Det tidigare verkliga intervallet tror jag låg på 60 ms och nu är det alltså ca 13.