Gå til innhold

Anbefalte innlegg

Hei.

 

Jeg er fersk på VB, og har egentlig ikke tenkt å bli en programmerer, men jeg prøver meg nå på å lage et program som jeg skal bruke til et modelljernbaneanlegg. Jeg bruker parallelporten som output fra programmet. Jeg har fått til mesteparten ved å snoke rundt på nettet, men jeg har et lite problem. Jeg har behov for å sette inn en liten pause.

 

Når en knapp blir trykket på i programvinduet sendes et signal fra parallelporten og ut på anlegget mitt. f. eks 00101011. Deretter sendes 00000000. Det er mellom disse signalene jeg trenger et mellomrom på f. eks. ett sekund.

 

Noen som kan hjelpe meg med dette?

Lenke til kommentar
Videoannonse
Annonse

Dersom du ikke ønsker å fryse applikasjonen, kan du enten dele venteoperasjonen opp i flere Sleep-kall (med DoEvents deretter), eller benytte GetTickCount:

' Stopper eksekvering av den kjørende tråden i en visst antall millisekunder

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

 

' Returnerer antall millisekunder siden Windows ble sist startet. Er nokså unøyaktig, og

' håndterer ikke større verdier enn 49,7 dager (i millisekunder). Bruk

' QueryPerformanceCounter og QueryPerformanceFrequency om du behøver mer nøyaktighet.

Private Declare Function GetTickCount Lib "kernel32" () As Long

 

Public Sub Wait(ByVal Milliseconds As Single, Optional ByVal Step As Long = 10)

 

    Dim iTime As Long

   

    ' Hent den første telleren

    iTime = GetTickCount

 

    ' Vent inntil vi er ferdige

    Do Until GetTickCount - iTime >= Milliseconds

   

        ' Forhindrer storforbruk av systemressursene

        Sleep Step

   

        ' Bemerk at følgende funksjon kan godt evalueres lengre enn den gjennværende tiden,

        ' alt etter de hendelser og oppdateringer som må gjennomføres.

        DoEvents

   

    Loop

 

End Sub

Endret av aadnk
Lenke til kommentar
er ikke GetTickTime nogenlunde det samme som Timer() funksjonen?

7884491[/snapback]

Njo, de kan brukes til noenlunde det samme, men Timer() returnerer antall sekunder siden midnatt. Da kan det oppstå problematikk om koden kjører før midnattskiftet, og dermed registrerer helt feil verdier.

Lenke til kommentar

Sleep-funksjonen fungerer bra den.

Jeg skal kun styre penser og lignende med programmet. Rullende matriell styres med ferdigkjøpt løsning.

 

Slik ser det f.eks. ut nå:

________________________

 

Private Sub Picture1_Click()

vbOut 888, 1

Sleep 1000

vbOut 888, 0

Picture2.Visible = false

Picture3.Visible = true

End Sub

________________________

 

Kan jeg istedet for å skrive 1000, sette inn en henvisning til en verdi slik at jeg kan justere tiden på alle postene ved å forandre ett tall? Og i så fall, kan jeg da få denne "felles" verdien til å opptre i programvinduet, slik at denne verdien kan justeres under kjøring?

 

Takk for hjelpen til dere alle.

Lenke til kommentar

Du kan f.eks. sette inn en tekstbox (her Text1) på formen, så taster du inn tallet før du klikker på picture-boksen. Har lagt inn en sjekk på at det som tastes inn er et tall >= 0. Initialiser tekstboksen med f.eks. 1000.

 

Private Sub Picture1_Click()

If IsNumeric(Text1.Text) = True Then

If Text1.Text >= 0 Then

MsgBox ("hei1")

Sleep Text1.Text

MsgBox ("hei2")

Else

MsgBox ("Negativt tall ikke tillatt!")

End If

Else

MsgBox ("Tast inn et tall større eller lik null!")

End If

End Sub

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...