Problem mit Tastensteuerung bei grafischer Darstellung

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von weißesnicht.

    naja es geht so wie du es gemacht hast schon, im Grunde macht das .Net intern auch nicht viel anders, nur kümmern die sich noch um alles mögliche andere wie z.B. DoubleBuffering, was für etwas animiertes/bewegtes natürlich sehr sinnvoll ist
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hier meine Experimente - die Ergebnisse habich in zeilen#18-#28 hinzukommentiert

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Keys) As Int16
    3. Private Function IsKeyPressed(ByVal vKey As Keys) As Boolean
    4. Return (GetAsyncKeyState(vKey) And &H8000) = &H8000
    5. End Function
    6. Dim _Rct As New Rectangle(50, 50, 20, 20)
    7. Dim _Brsh As New SolidBrush(Color.Black)
    8. Dim _Speed As Integer = 1
    9. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
    10. e.Graphics.FillRectangle(_Brsh, _Rct)
    11. End Sub
    12. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    13. #If False Then
    14. bestimmte Tasten-3-er-Kombis lassen sich nicht abfragen:
    15. Ist Up + eine weitere Cursor-Taste gedrückt, so wird ein zusätzliches Left nicht mehr wahrgenommen
    16. Ist Left + eine weitere Cursor-Taste gedrückt, so wird ein zusätzliches Up nicht mehr wahrgenommen
    17. Aber es gibt noch mehr:
    18. Ist Up + B gedrückt, so wird ein zusätzliches Left nicht mehr wahrgenommen
    19. Ist Left + B gedrückt, so wird ein zusätzliches Up nicht mehr wahrgenommen
    20. Hingegen zB Up + V blockiert die Left-Wahrnehmung nicht.
    21. #End If
    22. Invalidate(_Rct)
    23. lbUp.Visible = IsKeyPressed(Keys.Up)
    24. lbDown.Visible = IsKeyPressed(Keys.Down)
    25. lbLeft.Visible = IsKeyPressed(Keys.Left)
    26. lbRight.Visible = IsKeyPressed(Keys.Right)
    27. lbSpace.Visible = IsKeyPressed(Keys.Space)
    28. If lbUp.Visible Then _Rct.Y -= _Speed
    29. If lbDown.Visible Then _Rct.Y += _Speed
    30. If lbLeft.Visible Then _Rct.X -= _Speed
    31. If lbRight.Visible Then _Rct.X += _Speed
    32. _Brsh.Color = If(lbSpace.Visible, Color.Red, Color.Black)
    33. Invalidate(_Rct)
    34. End Sub
    35. End Class
    (Timer und Labels im Designer eingerichtet - s. Anhang)

    also wie @jvbsl sagt: Hardwarebeschränkung, nun zweifach bestätigt.
    Weil ich nutze ja den Api-Ansatz, und garnet die WinForms-Key-Events
    Dateien

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()