Tastatursteuerung in VB6

Hallo ihr :stuck_out_tongue:
Ich habe vor einigen Wochen mit VisualBasic angefangen,
und wollte nun mal etwas mit dem „Pfeiltasten“ machen.
Also… Wenn der benutzer dir Linke Pfeiltaste drückt, gibt er den Text „links“ aus. Wenn er rechts drückt, kommt die Meldung „Links“ usw.
Habe bei GoOgLe leider nichts gefunden…
Könnt ihr mir helfen?

Hallo,

Ich habe vor einigen Wochen mit VisualBasic angefangen,
und wollte nun mal etwas mit dem „Pfeiltasten“ machen.
Also… Wenn der benutzer dir Linke Pfeiltaste drückt, gibt er
den Text „links“ aus. Wenn er rechts drückt, kommt die Meldung
„Links“ usw.
Habe bei GoOgLe leider nichts gefunden…
Könnt ihr mir helfen?

Hallo,

hmmm, mit einem Befehl ist das nicht beantwortet, weil es darauf ankommt, was Du vor hast. Mir fallen fünf Varianten ein. Du kannst die Meldung dann erscheinen lassen, wenn ein bestimmtes Steuerelement den Focus hat, und da hast Du zwei Möglichkeiten. Wenn Du das richtige Steuerelement nimmst, hat das ein Keydown- und ein KeypressEreignis. Da gehört dann Dein Code rein. Zweite Möglichkeit, das soll immer passieren, wenn Deine Form aktiv ist. Dann stellst Du die Eigenschaft ‚Keypreview‘ der Form auf true und nimmst die obigen ereignisse der Form und schreibst da Deinen Code rein. Wenn das immer passieren soll, auch wenn die Form nicht aktiv ist, dann mußt Du über die API gehen und das mit GetAsyncKeystate machen.

Wenn Du Dein Problem genauer beschreibst, bekommst Du einen Beispielcode. :smile:

Gruß, Rainer

Hallo Rainer,
danke für deine schnelle Antwort :stuck_out_tongue:
Mit der Tastatursteuerung möchte ich ein
Objekt auf dem Bildschirm fahren lassen, bzw.
eine Kugel nach Rechts und Links fahren lassen (bei entsprechendem Tastendruck).

PS: Ich weiss, ich kenn mich in VB nicht sonderlich gut aus… aber,
was ist ein Steuerelemt?

Danke schonmal, Karsten

Hallo,

danke für deine schnelle Antwort :stuck_out_tongue:
Mit der Tastatursteuerung möchte ich ein
Objekt auf dem Bildschirm fahren lassen, bzw.
eine Kugel nach Rechts und Links fahren lassen (bei
entsprechendem Tastendruck).

dann würde ich das bevorzugt mit den Ereignissen der Form machen. Da geht aber immer nur eine Taste. Wenn Du also mehrere Tasten gleichzeitig abfragen willst (z.b: lenken und beschleunigen oder lenken und bremsen) dann kommst Du um die API nicht herum.

PS: Ich weiss, ich kenn mich in VB nicht sonderlich gut aus…
aber,
was ist ein Steuerelemt?

*g* OK, der ist gut.
Steuerelemente sind die Teile, die Du auf die Form legst. Also alles, was in der Werkzeugsammlung angezeigt wird. Buttons, Pictures, Textboxen … Gleiche Steuerelemente lassen sich als Steuerelmentefelder erzeugen, da kann man dann schön und bequem mit Schleifen programmieren. Um mal schgnell eins zu erzeugen, mach mal folgendes:

Lege einen Text auf die Form.
Klick die Textbox mit rechts an.
Klick auf kopieren.
Klick mit rechts auf die Form.
Klick auf Einfügen.
Klick auf Ja.

Nun hast Du zwei Textfelder auf der Form, die beide Text1 heißen. Das eine Text1(0), das andere Text1(1). Die Zahl in den Klammern kannst Du beim Programmieren durch eine Variable ersetzen.

So, aber jetzt Deine Steuerung:

Option Explicit

Private Sub Form\_KeyDown(KeyCode As Integer, Shift As Integer)
 Select Case KeyCode
 Case 37
 Me.Caption = "links"
 Case 38
 Me.Caption = "hoch"
 Case 39
 Me.Caption = "rechts"
 Case 40
 Me.Caption = "runter"
 End Select
End Sub

Private Sub Form\_Load()
 Form1.KeyPreview = True
End Sub

OK?

Gruß, Rainer

Hallo.
Genau so etwas habe ich gesucht :wink:

Vielen Dank, Karsten

Hallo Karten,

aber wenn Du nun doch zwei Tasten gleichzeitig brauchst? … :smile:

Dann nimmst Du das:

Option Explicit

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Dim txt(4) As String

Private Sub Form\_Load()
 Timer1.Interval = 100
 txt(0) = "links"
 txt(1) = "hoch"
 txt(2) = "rechts"
 txt(3) = "runter"
End Sub

Private Sub Timer1\_Timer()
 Dim i As Integer
 Me.Caption = ""
 For i = 37 To 40
 If GetAsyncKeyState(i) Then
 Me.Caption = Me.Caption & txt(i - 37) & " "
 End If
 Next
End Sub

Gruß, Rainer