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
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
