Keyboard gedrückt gehaltene Taste erkennen

Anfängerfragen zum Programmieren mit PureBasic.
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Keyboard gedrückt gehaltene Taste erkennen

Beitrag von schleicher »

Wie ein Tastendruck erkannt wird ist mir klar . z.B. key down

Code: Alles auswählen

EnableExplicit
Enumeration Window
  #win
EndEnumeration

Enumeration
  #w_key_down
EndEnumeration
Define event.l
Define x.i=0
#flags=#PB_Window_SystemMenu | #PB_Window_ScreenCentered
If OpenWindow(#win,0,0,300,200,"keytest",#flags)
  
  AddKeyboardShortcut(#win,#PB_Shortcut_Down,#w_key_down)                    ;add shortcut key_down
  
  Repeat
    event=WaitWindowEvent()
    Select event
      Case  #PB_Event_Menu
        Select EventMenu()
          Case #w_key_down
            x=x+1        
            Debug  Str(x)+" down key"   
            
        EndSelect
    EndSelect
  Until event=#PB_Event_CloseWindow
EndIf
Aber wie kann ich das machen, das erkannt wird, das gerade eine Taste gedrückt gehalten wird ?
Purebasic 5.51
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: Keyboard gedrückt gehaltene Taste erkennen

Beitrag von NicknameFJ »

Hi,

auf WIN gibt es die WIN-API Funktion GetAsyncKeyState

https://docs.microsoft.com/en-us/window ... nckeystate

mit der abgefragt werden kann ob eine Taste gerade im Moment der Abfrage gedrückt ist.


NicknameFJ
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Re: Keyboard gedrückt gehaltene Taste erkennen

Beitrag von tft »

hier ein wenig Code ..... zum experimentieren. Es wird die Taste "W" geprüft.

Code: Alles auswählen

;ömm ja .. Debug aktivieren !! 

Macro SwitshVar( _VarName_ )
  
  _VarName_ =  _VarName_ + 1 
  If _VarName_ > 1 
    _VarName_ = 0 
  EndIf 
    
EndMacro

OpenWindow(1,0,0,200,100,"Event Test",#PB_Window_SystemMenu |#PB_Window_ScreenCentered)    
ButtonGadget(1, 0, 0,  80, 20, "Play")
ButtonGadget(2, 90, 0,  80, 20, "Stop")  
DisableGadget(2,1) 
  
Debug "Bitte drücken sie eine beliebige Taste!"+Str(rr) 
GetCursorPos_(st.POINT) 
Debug st\x 
Debug st\y 

Define Schalter

Repeat 
  
  Event=WaitWindowEvent() 
  
  Select Event
    Case #PB_Event_CloseWindow  
      Break
    Case #PB_Event_Gadget
      Select EventGadget()
       Case 1 ; Play
          DisableGadget(2,0)  ; Enable the 'Stop' gadget
          DisableGadget(1,1)  ; Disable the 'Play' Gadget
       Case 2 ; Stop
          DisableGadget(1,0)  ; Enable the 'Play' gadget
          DisableGadget(2,1)  ; Disable the 'Stop' Gadget
       EndSelect 
     
    Case #WM_MOUSEWHEEL
      If (EventwParam() >> 16) & $8000
        Debug "Down"
      Else         
        Debug "Up"
      EndIf
    Case #WM_MOUSEMOVE 
      Debug "#WM_MOUSEMOVEw " + Str(EventwParam()) 
      Debug "#WM_MOUSEMOVEl " + StrF(EventlParam()) 
    Case #WM_LBUTTONDBLCLK  
      Debug "#WM_LBUTTONDBLCLK " + Str(EventwParam()) 
      Debug "#WM_LBUTTONDBLCLK " + Str(EventlParam()) 
      
    Case #WM_LBUTTONDOWN  
      Debug "#WM_LBUTTONDOWN " + Str(EventwParam()) 
      Debug "#WM_LBUTTONDOWN " + Str(EventlParam()) 
      
    Case #WM_LBUTTONUP  
      Debug "#WM_LBUTTONUP " + Str(EventwParam()) 
      Debug "#WM_LBUTTONUP " + Str(EventlParam()) 
      
    Case #WM_RBUTTONDOWN  
      Debug "#WM_RBUTTONDOWN " + Str(EventwParam()) 
      Debug "#WM_RBUTTONDOWN " + Str(EventlParam()) 
      
    Case #WM_RBUTTONUP 
      Debug "#WM_RBUTTONUP" + Str(EventwParam()) 
      Debug "#WM_RBUTTONUP" + Str(EventlParam()) 
      
    Case #WM_MBUTTONDBLCLK 
      Debug "#WM_MBUTTONDBLCLK " + Str(EventwParam()) 
      Debug "#WM_MBUTTONDBLCLK " + Str(EventlParam()) 
    Case #WM_MBUTTONDOWN 
      Debug "#WM_MBUTTONDOWN " + Str(EventwParam()) 
      Debug "#WM_MBUTTONDOWN " + Str(EventlParam()) 
    Case #WM_MBUTTONUP 
      Debug "#WM_MBUTTONUP " + Str(EventwParam()) 
      Debug "#WM_MBUTTONUP " + Str(EventlParam()) 
      
    Case #WM_NCMOUSEMOVE 
      Debug "#WM_NCMOUSEMOVE " + Str(EventwParam()) 
      Debug "#WM_NCMOUSEMOVE " + Str(EventlParam()) 
      
    Case #WM_NCLBUTTONDBLCLK 
      Debug "#WM_NCLBUTTONDBLCLK " + Str(EventwParam()) 
      Debug "#WM_NCLBUTTONDBLCLK " + Str(EventlParam()) 
      
      
      
    Case #WM_ACTIVATE 
      Debug "#WM_ACTIVATE " +Str(EventwParam()) 
      Debug "#WM_ACTIVATE " +Str(EventlParam()) 
    Case #WM_CHAR 
      Debug "#CHAR w:    " + Chr(EventwParam())
      Debug "#CHAR l:    " + Str(EventlParam()) 
    Case #WM_DEADCHAR 
      Debug "#DEADCHAR:   " + Str(EventwParam()) 
    Case #WM_KEYDOWN 
      Debug "#KEYDOWN(w): " + Str(EventwParam()) 
      Debug "#KEYDOWN(l): " + Str(EventlParam()) 
      SwitshVar( schalter )
    Case #WM_KEYUP 
      Debug "#KEYUP(w):   " + Str(EventwParam()) 
      Debug "#KEYUP(l):   " + Str(EventlParam())
      SwitshVar( schalter )
    Case #WM_SYSCHAR 
      Debug "#SYSCHAR:   " + Str(EventwParam()) 
    Case #WM_SYSDEADCHAR  
      Debug "#SYDEADSCHAR:   " + Str(EventwParam()) 
    Case #WM_SYSKEYDOWN 
      Debug "#SYSKEYDOWN:   " + Str(EventwParam()) 
    Case #WM_SYSKEYUP 
      Debug "#SYSKEYUP:   " + Str(EventwParam()) 
    Default      
      Debug Event
  EndSelect 
  

; -----------------------------------------------

  If GetAsyncKeyState_(#VK_W) <> 0
    Debug "Key W it is presset in this moment"
  EndIf

 ;----------------------------------------------

  GetCursorPos_(st.POINT) 
  Debug st\x 
  Debug st\y 
  Debug "Schalter = "+Str(schalter)
  Debug "-----------------"   
  
ForEver 
End 
gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Antworten