Avatar billede nanna31 Praktikant
14. december 2002 - 00:49 Der er 24 kommentarer og
5 løsninger

Delay

Hvordan laver man et delay i Visual Basic ?
Avatar billede tubber Juniormester
14. december 2002 - 01:01 #1
Delay ? hvad mener du helt nøj agtigt ?

Du kan lave det med en timer.....

Du laver en knap hvor du normalt vil have en handling, der aktivere du din timer.....

Du sætter en timer ind og sætter følgende i din form_load:

Private Sub Form_Load()
  Timer1.Interval = 1000 'Tallet er antal millisekunder timeren løber over
  Timer1.Enable = False
End Sub

Du laver så en knap der starter din timer:

Private Sub Command1_Click()
  Timer1.Enable = True
End Sub

Og så din handling i timeren, som slutter med at disable timeren:

Private Sub Timer1_Timer()
  MsgBox "Timer1 er nu slutter"
  Timer1.Enable = False
End Sub

/Tubber
Avatar billede tubber Juniormester
14. december 2002 - 01:09 #2
Fandt lige den her i et andet spg.

Sub Delay()
d = 0
Do While d < 4000
d = d + 1
Loop
End Sub
Den skal kaldes inde fra en løkke, så kører den den igennem inden den fortsætter løkken....

GoSub Delay vil jeg tro du skal bruge for at kalde den......
Avatar billede sjh Nybegynder
14. december 2002 - 03:02 #3
Avatar billede mikker Nybegynder
14. december 2002 - 09:47 #4
Tubber>> Hvad med den her:

For d = 1 to 10000:next d

Gør den ikke det samme ?

- Mikker
Avatar billede mikker Nybegynder
14. december 2002 - 09:49 #5
For selv at svare på det: NEJ!

- Mikker
Avatar billede mikker Nybegynder
14. december 2002 - 10:23 #6
med en commandbutton og en textbox er her en pause på 5 sekunder der kan kaldes altid og hele tiden...

Private Sub Command1_Click()
Call paus(5)
Text1 = "pause slut"
End Sub

Sub paus(ByVal lang As Integer)
mytime2 = DateAdd("s", lang, Time)
Do While Not mytime2 <= Time
DoEvents
Loop
End Sub


- Mikker
Avatar billede tubber Juniormester
14. december 2002 - 11:07 #7
Du kan også lave en lidt ældre model af et delay

Du laver en knap med din kode og tæller langsomt til 5 inden du trykker......

Er det med et loop, så lav så den stopper efter hver gennemløb, tæl til 5 tryk  på knappen og lad den lave et gennemløb mere.....og så tæl.....

/Lige et useriøst indslag :O)
/Tubber
Avatar billede Slettet bruger
14. december 2002 - 11:31 #8
Du kan også anvende et API-kald, hvilket i modsætning til loops giver samme delay på alle computere, uanset processor-hastighed.

Du definerer denne funktion i toppen af din kode:

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

Herefter kan du kalde metoden "Sleep" med en parameter der angiver antallet af millisekunder, programmet skal vente.
Avatar billede martin_moth Mester
14. december 2002 - 12:41 #9
Og så er der også Wait ...
Avatar billede martin_moth Mester
16. december 2002 - 14:59 #10
Vrøvl, gu er der ej wait - huskede forkert. Brug en Timer, eller API-kaldet fra magik :o)
Avatar billede nanna31 Praktikant
16. december 2002 - 21:47 #11
- i toppen af min kode, siger du maqik - kan du præcisere hvor det er ? - i toppen af modulet, sub'en eller hvad - den brokker sig begge steder.
Avatar billede martin_moth Mester
16. december 2002 - 22:53 #12
I toppen af det kodevindue, der knytter sig til din form. API-kald er måske lidt voldsomt, det fungerer ved at du kalder funktioner der ligger i diverse dll-filer i din windowsmappe (i dette tilfælde "kernel32.dll" der ligger i din SYSTEM-mappe under windows), og er lidt "avanceret" :o) Og pas på med erklæringen af funktionen - den er følsom for den mindste fejl, mangler et mellemrum eller er et bogstav skrevet med stort i stedet for lille, får du fejl.

Hvis du vil nøjes med en mindre forkromet løsning, der virker 100% efter hensigten, kan du bruge timeren som tubber har forklaret om - hans første svar er lige til at kopiere :o)
Avatar billede Slettet bruger
17. december 2002 - 09:40 #13
Hov. Du skal nok have Private foran Declare. Ellers må det da vist give fejl. :o)
Avatar billede martin_moth Mester
19. december 2002 - 13:46 #14
Er du med, nanna31? Fik du det til at virke?
Avatar billede martin_moth Mester
06. januar 2003 - 18:33 #15
Halooo? Nanna? Giv points, eller spørg videre
Avatar billede nanna31 Praktikant
06. januar 2003 - 19:11 #16
ja - jeg kan ikke få noget af det til at virke, men jeg er også begynder, som jeg sagde.
Avatar billede sjh Nybegynder
06. januar 2003 - 20:39 #17
nanna31 >>hvad er det du ønsker at lave? og er du sikker på at det er "delay" du vil lave?
Avatar billede martin_moth Mester
06. januar 2003 - 22:12 #18
Ja - kom igen. Forklar præcis hvad du ønsker, og jeg (eller en anden) skal nok forklare det så du forstår og det virker :o)
Avatar billede nanna31 Praktikant
07. januar 2003 - 16:55 #19
Jeg har et loop i mit program, som kører alt for hurtigt, så for hvert gennemløb, skal jeg have indsat en forsinkelse i afviklingen (I Pascal plejede jeg bare at skrive delay(1000); - og så stoppede hele afviklingen i et sekund, kan dette ikke gøre ligeså enkelt i VB ?
Avatar billede martin_moth Mester
07. januar 2003 - 17:41 #20
Nææ - du skal have fat i en Timer. - Eller det API-kald der er blevet nævnt. Timeren er faktisk ret smart, og kan bruges til mange ting. Prøv at læs de få linier der står om den i hjælpen.

Er du i tvivl om hvordan timeren skal bruges, så spørg.

Jeg undrer mig over, hvad mon det er for et loop der "kører for hurtigt" ??? Hvis det er fordi en bruger skal nå at læse noget tekst eller lignende i hvert loop, kan du jo lave en msgbox der spørger brugeren hvornår han/hun er klar til at fortsætte. Så kan brugeren selv bestemme om der skal gå 1 sekund eller et minut... Bare en ide
Avatar billede martin_moth Mester
07. januar 2003 - 17:45 #21
Eller du kan bruge uret fra din PC, som mikker har givet et perfekt eksempel på 14/12-2002 10:23:38 :o)
Avatar billede martin_moth Mester
07. januar 2003 - 17:50 #22
Mht. det API-kald, så er det blot at smide een linie i toppen af din kode, hvorefter du kan bruge Sleep(5000) - præcist som i Pascal!!!

Linien du skal sætte i toppen af dit kodevindue er:

  Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Avatar billede sjh Nybegynder
07. januar 2003 - 18:02 #23
Prøv at lave det sådan:


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

Dim bLoopRunning As Boolean

Public Sub TheLoop()
Const LoopHastighed As Long = 50 'Hastighed på Loop
Static TickCount As Long
Static LastTickCount As Long

Static lCount As Long

  Do While bLoopRunning
    TickCount = GetTickCount()
      If TickCount - LastTickCount > LoopHastighed Then
      LastTickCount = TickCount
'-------------------- her skriver du din loop kode --------------------

lCount = lCount + 1
Me.Caption = lCount

'-------------------- her skriver du din loop kode --------------------
      End If
    DoEvents
  Loop
End Sub

Private Sub Form_Load()
  Me.Show
  bLoopRunning = True
  Call TheLoop
End Sub

Private Sub Form_Unload(Cancel As Integer)
  bLoopRunning = False
  Call TheLoop
End Sub
Avatar billede sjh Nybegynder
07. januar 2003 - 18:17 #24
du kan også få det som du vil: delay 500

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

Public Sub delay(LoopHastighed As Long)
Dim bLoopRunning As Boolean
Static TickCount As Long
Static LastTickCount As Long
  bLoopRunning = True
  Do While bLoopRunning
    TickCount = GetTickCount()
      If TickCount - LastTickCount > LoopHastighed Then
      LastTickCount = TickCount
        bLoopRunning = False
      End If
    DoEvents
  Loop
End Sub

Private Sub Form_Load()
Static lCount As Long
  Me.Show
  Do While lCount < 10
    delay 500
    lCount = lCount + 1
    Me.Caption = lCount
  Loop
End Sub
Avatar billede nanna31 Praktikant
08. januar 2003 - 12:19 #25
Ok tak for hjælpen, jeg forsøger jeres forslag.
Avatar billede martin_moth Mester
08. januar 2003 - 12:25 #26
Den mest simple løsning er nok den fra 07/01-2003 17:50:16 - kræver kun een linie :o)
Avatar billede sjh Nybegynder
08. januar 2003 - 13:06 #27
hvis det er den kode du har brugt så var det jo martin_moth der skulle have haft de 75 point. ;)
Avatar billede martin_moth Mester
08. januar 2003 - 13:35 #28
Nej - for jeg gentog bare magik's svar ;o)

Alle har jko efterhånden leveret en indsats, og jeg har det fint med at der er delt pts imellem os :o)

Tænk - så mange svar for en lille delay-funktion.

Undrer mig stadig over hvad i alverden hun skal bruge det til?

Over & out, Martin
Avatar billede sjh Nybegynder
08. januar 2003 - 14:28 #29
ok det fik jeg ikke set. #-)

Hun skal nok bruge det til at nedsætte hastigheden på et loop eller for i =... ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester