Mehr als 2 Tastenklicks abfangen und auswerten...

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von VincentTB.

    Ich meine das man die Tastenklicks mit der Windows-Api filtern und blockieren kann.
    Das mit dem Rectangle ist möglich, du must dir halt einfach mal die Graphics Klasse ankucken da gibt es auch die Funktion RotateTransform.
    Hier ist ein Beispiel Code :

    VB.NET-Quellcode

    1. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    2. e.Graphics.RotateTransform(80, Drawing2D.MatrixOrder.Append)
    3. e.Graphics.DrawRectangle(Pens.Black, New Rectangle(0, 0, 40, 40))
    4. End Sub


    EDIT //
    GetAsyncKeyState ist wohl das was du suchst :)

    MFG BlackNetworkBit
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „BlackNetworkBit“ ()

    Naja das wäre eben mit GetAsyncKeyState möglich must halt nur eine if-verschachtelung basteln :)
    z.b :

    VB.NET-Quellcode

    1. <DllImport("User32.Dll")> Private Shared Function GetAsyncKeyState(ByVal vKey As Integer) As Short
    2. End Function

    VB.NET-Quellcode

    1. Dim D As Boolean = GetAsyncKeyState(Keys.D)
    2. Dim Space As Boolean = GetAsyncKeyState(Keys.Space)
    3. If D = True Then
    4. If Space = True Then
    5. 'DeinQUELLCODE
    6. End If
    7. End If


    MFG BlackNetworkBit
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

    enIking1998 schrieb:

    Ohh ...

    Das ist doch ekelig... soviele If-Schleifen...

    Mfg.eniking1998

    Wirklich ... if-Schleifen ... WIRKLICH
    anders geht es nicht :)

    MFG BlackNetworkBit
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    naja nicht wen du mit Booleans arbeiten wilst da gibt es bekantlich nur 2 Werte Wahr und Falsch.
    also kein Select Case Block.

    /edit ich hasse es wenn leute ihre Post tod editieren.....
    MFG BlackNetworkBit
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Ich hab mir überlegt, eine globale Deklaration, an Booleans anzulegen, nun meine Frage,

    im KeyDown_Ereigniss kann ich es ja mit Select Case e.KeyCode lösen...
    Kann ich nun das soweit modifizieren, dass wenn Space zB True und D = True ist, dieses gleichzeitig ausgeführt wird?

    Also zur Theorie, bzw. Idee...
    Ich will ein Kampfsystem dem Game implementieren...
    Dabei soll, zB D laufen sein...
    Man soll ebend mehrere Tasten GLEICHZEITIG drücken können...

    Mfg.eniking1998
    Ich bitte dich inständig mache das ganz mit GetKeyAsynchState oder nur mit dem KeyDown_Ereigniss.
    Beides ergibt nur murks und Facepalms wenn jemand sich deinen Quellcode ankuckt.

    PS Habe dir oben doch schon eine Lösung präsentiert.

    MFG BlackNetworkBit
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    ... Wirklich naja man kann bei IF-Abfragen ja auch nicht kombienieren nööööö :D
    z.b so :

    VB.NET-Quellcode

    1. If D = True and Space = true then
    2. elseif D = False and Space = true then
    3. end if


    MFG BlackNetworkBit
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Ernsthaft?
    Ich will keine Tastenkombinationen, sondern lediglich, dass wenn D und gleichzeitig Space gedrückt wird,der Charackter nicht plötzlich aufhört
    sich zu bewegen...

    Mfg.eniking1998

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „enIking1998“ ()

    ... ernsthaft ?
    wirklich ? ich habe dir doch geschrieben das du es einsetzten kannst wenn es dir nicht gefällt dann kannst du ja nach einer anderen Lösung suchen ....
    indirekt ist es ja wie dein tolles KeyDown_event bloß das man mit GetAsyncKeyState eben mehrere Tasten abfragen kann.
    ich glaube du solltest erst mal hier : Toller Link
    rein schauen so das du weist was ich meine(falls ich mich so unverständlich ausgedrückt habe ...)

    MFG BlackNetwokBit
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

    VB.NET-Quellcode

    1. Public Class Form1
    2. Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Short
    3. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    4. If My.Computer.Keyboard.CtrlKeyDown = True And GetAsyncKeyState(Keys.F1) = -32767 Then
    5. MessageBox.Show("STRG und F1 wurde gedrückt")
    6. End If
    7. End Sub
    8. End Class



    ODER !!!

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Short
    4. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    5. If CBool(CShort(My.Computer.Keyboard.CtrlKeyDown = True) And GetAsyncKeyState(Keys.F1) And CShort(GetAsyncKeyState(Keys.F2) = -32767)) Then
    6. MessageBox.Show("STRG und F1 + F2 wurde gedrückt")
    7. End If
    8. 'oder
    9. If CBool(GetAsyncKeyState(Keys.A)) AndAlso CBool(CBool(GetAsyncKeyState(Keys.B)) AndAlso CBool(GetAsyncKeyState(Keys.C))) Then
    10. MsgBox("Gedrückt")
    11. End If
    12. End Sub
    13. End Class


    und um das ganze diagonal zu bewegen ,sagen wir wenn a+b gedrückt geh rechts und hoch .
    so hab ich es bei einer form mal gemacht ging ganz gut !

    Private Sub Form_nach_rechts()
    x = x + 1
    Me.Location = New Point(x, y)
    End Sub
    Private Sub Form_nach_links()
    x = x - 1
    Me.Location = New Point(x, y)
    End Sub
    Private Sub Form_nach_oben()
    y = y - 1
    Me.Location = New Point(x, y)
    End Sub
    Private Sub Form_nach_unten()
    y = y + 1
    Me.Location = New Point(x, y)
    End Sub

    LG Andre ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TVX“ ()