Seite 1 von 1

Taste abfragen ...in eine Schleife ?

Verfasst: 01.03.2012 20:18
von funkheld
Wie kann man in dieser Schleife am besten ein gedrückte Taste abfragen ?

Danke.

Gruss

Code: Alles auswählen

 Repeat
   Event = WaitWindowEvent()
  .......
  Until EventID = #PB_Event_CloseWindow

Re: Taste abfragen ...in eine Schleife ?

Verfasst: 01.03.2012 20:24
von RSBasic

Code: Alles auswählen

EnableExplicit

Define EventID

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  Repeat
    EventID=WaitWindowEvent()
    If GetAsyncKeyState_(#VK_A)
      Debug "Taste A wird gedrückt."
    EndIf
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf

Re: Taste abfragen ...in eine Schleife ?

Verfasst: 01.03.2012 20:33
von ts-soft
GetAsyncKeystate hat IMHO nichts im EventLoop zu suchen, ist nicht Eventgesteuert!

Code: Alles auswählen

EnableExplicit

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow : Break
      Case #WM_KEYDOWN : Debug "Taste gedrückt"
      Case #WM_KEYUP : Debug "Taste losgelassen"
    EndSelect
  ForEver
EndIf 
oder ähnlich zu rsbasic seinen code:

Code: Alles auswählen

EnableExplicit

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow : Break
      Case #WM_KEYDOWN
        If EventwParam() = #VK_A
          Debug "A gedrückt"
        EndIf
    EndSelect
  ForEver
EndIf 

Re: Taste abfragen ...in eine Schleife ?

Verfasst: 01.03.2012 21:50
von RSBasic
Oder per Callback:

Code: Alles auswählen

Procedure.l WindowCallback(hWnd, uMsg, wParam, lParam)
  Result = #PB_ProcessPureBasicEvents
  
  If uMsg = #WM_KEYUP And wParam = #VK_A
    Debug "Taste A wurde gedrückt."
  EndIf
  
  ProcedureReturn Result
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  SetWindowCallback(@WindowCallback())
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Ist aber im Prinzip das gleiche wie 2. Beispielcode von ts-soft.

Re: Taste abfragen ...in eine Schleife ?

Verfasst: 01.03.2012 23:04
von funkheld
Jup, danke an alle.

Gruss

Re: Taste abfragen ...in eine Schleife ?

Verfasst: 01.03.2012 23:19
von ts-soft
Wenn man Windows-Messages verarbeitet, wo es kein Äquivalent in PB zu gibt, sollte man dies möglichst in einem
Windows-Callback tun, da im PB EventLoop nicht alle Messages ankommen. Was jetzt geht, kann in der nächsten
PB Version schon nicht mehr funktionieren.

Ausserdem können bestimmte Dinge im PB Eventloop nicht umgesetzt werden, z.B. die Rückgabewert festlegen.
Der Code von RSBasic sollte eine 0 zurückgeben, außerdem ist es keine Procedure.l :mrgreen:

Code: Alles auswählen

Procedure.i WindowCallback(hWnd, uMsg, wParam, lParam)
  Protected Result = #PB_ProcessPureBasicEvents
 
  If uMsg = #WM_KEYUP And wParam = #VK_A
    Debug "Taste A wurde gedrückt."
    ; Return = 0 oder
    ProcedureReturn 0
  EndIf
 
  ProcedureReturn Result
EndProcedure

If OpenWindow(0, 0, 0, 500, 250, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  SetWindowCallback(@WindowCallback())
 
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf 
Euer Korinthenscheißerle :mrgreen: