Avatar billede danielhep Nybegynder
29. maj 2001 - 22:55 Der er 11 kommentarer og
1 løsning

Haste sag.....

Jeg får snart spat....
Jeg har koden:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyUp Then
mand.Top = mand.Top - 600
End If
If KeyCode = vbKeyDown Then
  mand.Top = mand.Top - 1500
End If
If KeyCode = vbKeyLeft Then
  mand.Top = mand.Top - 1500
End If
If KeyCode = vbKeyRight Then
  mand.Top = mand.Top - 1500
End If
End Sub
Jeg har en lille mand på min form og han vil simpelhen bare ikke rykke dig en skid....Hvis der er nogle som kan finde ud af det her så skriv gerne...
Avatar billede driis Nybegynder
29. maj 2001 - 23:04 #1
\'manden\' - er han en picturebox eller lign?
Avatar billede danielhep Nybegynder
29. maj 2001 - 23:07 #2
manden er i en picturebox og det billeder som der er sat ind i pictureboxen hedder \"mand.bmp\".
Avatar billede driis Nybegynder
29. maj 2001 - 23:15 #3
Hmmm, det burde virke, det du har, men prøv alligvel at tilføje en Me.Refresh :

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyUp Then
mand.Top = mand.Top - 600
End If
If KeyCode = vbKeyDown Then
  mand.Top = mand.Top - 1500
End If
If KeyCode = vbKeyLeft Then
  mand.Top = mand.Top - 1500
End If
If KeyCode = vbKeyRight Then
  mand.Top = mand.Top - 1500
End If
Me.Refresh
End Sub


Du kan også prøve med

If KeyCode = vbKeyRight Then
  mand.Top = mand.Top - 1500
  Debug.Print \"til højre trykket\"
End If

Så du kan se, om tastetrykkene overhovedet opfanges
Avatar billede danielhep Nybegynder
29. maj 2001 - 23:22 #4
Den picturebox jeg har, skal den bare hedde \"picturebox\"??--
Avatar billede driis Nybegynder
29. maj 2001 - 23:30 #5
Din picturebox skal naturligvis hedde \'mand\' når du bruger dén kode....

Men anyways, en bedre måde at få det virke er denne: Tilføj en timer til din form, og sæt intervallet til 50 eller deromkring, og brug så flg. kode - så virker det, jeg har lige testet:

Private Declare Function GetKeyState Lib \"user32.dll\" (ByVal nVirtKey As Long) As Integer
Dim key As Integer

Private Sub Timer1_Timer()
key = GetKeyState(vbKeyUp)
If key And &H8000 Then
    mand.Top = mand.Top - 200
End If

key = GetKeyState(vbKeyDown)
If key And &H8000 Then
    mand.Top = mand.Top + 200
End If

key = GetKeyState(vbKeyLeft)
If key And &H8000 Then
    mand.Left = mand.Left - 200
End If

key = GetKeyState(vbKeyRight)
If key And &H8000 Then
    mand.Left = mand.Left + 200
End If

End Sub
Avatar billede driis Nybegynder
29. maj 2001 - 23:36 #6
De 2 første linier skal selvfølgelig stå under Declarations.
Avatar billede danielhep Nybegynder
29. maj 2001 - 23:38 #7
!!!!!!DET VIRKER!!!!!!!
(Hvad betyder det her)??\"Private Declare Function GetKeyState Lib \"user32.dll\" (ByVal nVirtKey As Long) As Integer\"
key = GetKeyState(vbKeyRight)
If key (Hvad betyder der her)\"And &H8000\" Then
    mand.Left = mand.Left + 200
End If
Avatar billede danielhep Nybegynder
29. maj 2001 - 23:41 #8
Hey hvis du kan klare lige den sidste...
Hvordan gør jeg sådan at min mand ikke kan gå ud over formen?
Dvs. at det er en slags mur man ikke man træde over..
Avatar billede driis Nybegynder
29. maj 2001 - 23:43 #9
\'Private Declare Function GetKeyState Lib \"user32.dll\" (ByVal nVirtKey As Long) As Integer\'
Denne linie deklarer en Windows API funktion, som du bruger til at returnere en værdi, der fortæller om en tast er trykket ned eller ej. Den værdi der returneres indeholder &H8000, hvis tasten er nedtrykket.

\'If key And &H8000 Then\'
Denne linie tjekker om \'key\' indeholder &H8000.
Avatar billede driis Nybegynder
29. maj 2001 - 23:48 #10
Private Sub Timer1_Timer()
key = GetKeyState(vbKeyUp)
If key And &H8000 Then
    If Not mand.Top < 200 Then
        mand.Top = mand.Top - 200
    End If
End If

key = GetKeyState(vbKeyDown)
If key And &H8000 Then
    If Not mand.Top + 200 > Me.Height - mand.Height Then
        mand.Top = mand.Top + 200
    End If
End If

key = GetKeyState(vbKeyLeft)
If key And &H8000 Then
    If Not mand.Left < 200 Then
        mand.Left = mand.Left - 200
    End If
End If

key = GetKeyState(vbKeyRight)
If key And &H8000 Then
    If Not mand.Left + 200 > Me.Width - mand.Width Then
        mand.Left = mand.Left + 200
    End If
End If

End Sub
Avatar billede danielhep Nybegynder
29. maj 2001 - 23:57 #11
Det må jeg sige..Det er du jo helt god til.
Der er bar lige en lille ting.Min mand kan godt komme lidt for mege under...Ikke meget men lidt...Hvad kan det skyldes?
Avatar billede driis Nybegynder
30. maj 2001 - 13:57 #12
Prøv at lege lidt med værdierne, eller sæt et mindre flyt - interval ind og gør intervallet i timeren mindre.
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