Seite 1 von 1
Wurden Return oder Enter gedrüct
Verfasst: 05.01.2023 14:15
von cyerangle
Hallo zusammen,
Ich arbeite an einem Spiel bei dem der Nutzer Namen eingeben soll.
Ich habe ein StringGadget für die Eingabe der Namen .
Bei drücken von Return oder Enter soll der jeweilige Name in ein ListViewGadget überführt werden. Im Augenblick behelfe ich mir mit einem Schalter,
der das beim Klick auf den Schalter macht. Das kann aber nicht Alles sein. In der Hilfe bin ich erschlageen worden.
#PB_Key_Return ist die Konstante für Return oder Enter aber wie kann ich die aus dem StringGedget auslesen. Da wären:
KeyboardInkey()
KeyboardPushed(KexID)
KeyboardReleased(KeyID)
Habt Ihr da einen Ansatz für mich?
Danke Mike
Re: Wurden Return oder Enter gedrüct
Verfasst: 05.01.2023 18:18
von Axolotl
da gibt es wohl verschiedene Möglichkeiten
Beispiel mit windows nachrichten in der hauptschleife:
Code: Alles auswählen
;/=============================================================================
;| Application : Windows_KeyboardQuery.pb
;|-----------------------------------------------------------------------------
;| Purpose : Test the different windows messages acc. to keyboard events.
;| OS : Windows only
;| License : MIT ~~~ Use is at your own risk!
;| Copyright (c) 2023 by A.H. (Axolotl)
;\=============================================================================
Procedure.s DecodeLParam(lParam) ; acc. to MSDN
Protected ret_val$
ret_val$ = " " + Bool(lParam & $80000000) + ; translation state
" " + Bool(lParam & $40000000) + ; previouse key state
" " + Bool(lParam & $20000000) + ; context code (always 0 for WM_KEYDOWN
;" " + Hex((lParam & $1E000000) >> 25) + ; reserved, do not use
" " + Bool(lParam & $01000000) + ; extended key
" " + Hex((lParam >> 16) & $FF) + ; scan code
" " + Hex(lParam & $FFFF) ; repeat count
ProcedureReturn ret_val$
EndProcedure
; -----------------------------------------------------------------------------
Procedure AddEventToList(Event$, wParam, lParam)
AddGadgetItem(2, -1, LSet(Event$, 16) + "-> wParam:" + LSet(Str(wParam), 3) + " lParam: " + DecodeLParam(lParam))
SetGadgetState(2, CountGadgetItems(2)-1) ; move to the last appended line
EndProcedure
; -----------------------------------------------------------------------------
Procedure main()
If OpenWindow(0, 0, 0, 480, 400, "Keyboard Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
TextGadget(0, 8, 8, 464, 18, "Bitte drücken sie eine beliebige Taste!")
StringGadget(1, 8, 28, 464, 18, "")
ListViewGadget(2, 8, 48, 464, 344, $4000) ; $4000 == #LB_NOSEL (not defined in PB)
SetGadgetFont(2, LoadFont(0, "consolas", 9))
SetActiveGadget(1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break ; say good bye
Case #PB_Event_ActivateWindow
AddGadgetItem(2, -1, "#PB_Event_ActivateWindow ") ; no Params
Case #PB_Event_DeactivateWindow
AddGadgetItem(2, -1, "#PB_Event_DeactivateWindow ") ; no Params
Case #WM_ACTIVATE
AddGadgetItem(2, -1, "#WM_ACTIVATE " + LSet(Str(EventwParam()), 3) + ", " + Str(EventlParam())) ; not working in main loop (see above)
Case #WM_CHAR
AddEventToList("#WM_CHAR", EventwParam(), EventlParam())
Case #WM_DEADCHAR
AddEventToList("#WM_DEADCHAR", EventwParam(), EventlParam())
Case #WM_KEYDOWN
AddEventToList("#WM_KEYDOWN", EventwParam(), EventlParam())
Case #WM_KEYUP
AddEventToList("#WM_KEYUP", EventwParam(), EventlParam())
Case #WM_SYSCHAR
AddEventToList("#WM_SYSCHAR", EventwParam(), EventlParam())
Case #WM_SYSDEADCHAR
AddEventToList("#WM_SYSDEADCHAR", EventwParam(), EventlParam())
Case #WM_SYSKEYDOWN
AddEventToList("#WM_SYSKEYDOWN", EventwParam(), EventlParam())
Case #WM_SYSKEYUP
AddEventToList("#WM_SYSKEYUP", EventwParam(), EventlParam())
EndSelect
ForEver
EndIf
ProcedureReturn 0
EndProcedure
End main()
Ansonsten hatte ich auch
HIER mal was gepostet
Re: Wurden Return oder Enter gedrüct
Verfasst: 05.01.2023 20:57
von jogo
ich habe das mit "AddKeyboardShortcut(0,#PB_Shortcut_Return,13)" gelöst. Du definierst damit also das Drücken der Enter-/Returntaste als Menüereignis. Schau mal in der Hilfe nach AddKeyboardShortcut.
Die 13 stellt also das Eventmenü 13 dar. Kannst auch eine andere Menü-Nr. nehmen. Aber 13 passt halt für mich besser zum Nachvollziehen.
In der Ereignisschleife wertest du dann event mit #PB_Event_Menu aus.
Code: Alles auswählen
;stringedits bauen (zum editieren der einträge / #2,#3,#4,)
StringGadget(2,235,45,200,25,"") ;zweck 1
StringGadget(3,235,90,200,25,"") ;zweck 2
StringGadget(4,235,135,200,25,"") ;zweck 3
;menü-shurtcuts // hotkeys
AddKeyboardShortcut(0,#PB_Shortcut_Return,13) ;entertaste aktivieren und eventmenu 13 zuweisen
AddKeyboardShortcut(0,#PB_Shortcut_F11,211) ;F11 aktivieren und eventmenu 211 zuweisen // weiteres Beispiel
;Ereignisschleife
Repeat
Select WaitWindowEvent() ;fensterereignis auswählen
Case #PB_Event_CloseWindow ;wenn x
Select EventWindow() ;im welchen fenster wurde x gedrückt?
Case 0 ;hauptfenster #0
Break ; aus schleife hüpfen und komplett beenden
EndSelect ;welches fenster ge-ixt wurde
Case #PB_Event_Menu ;wenn menü
Select EventMenu() ;auswahl, welches menü-item // hotkey
Case 13 ;wenn ***ENTER*** gedrückt
Select GetActiveGadget() ;auf welchen fensterelement wurde enter gedrückt?
Case 2 ;wenn enter im zweck-edit 1
debug "zweck 1"
Case 3 ;wenn enter im zweck-edit 2
debug "zweck 2"
Case 4 ;wenn enter im zweck-edit 3
debug "zweck 3"
EndSelect ;welches gadget grad den focus bei enter hat
Case 211 ;wenn *** f11 ***** gedrückt //
debug "F11 gedrückt"
EndSelect ;welche hotkey
EndSelect ;fensterereignis auswählen
ForEver ;
end
für dieses Beispiel mußt noch das Hauptfenster bauen - hab ich vergessen...
Re: Wurden Return oder Enter gedrüct
Verfasst: 06.01.2023 06:28
von jacdelad
Genau, AddKeyboardshortcut PLUS EventGadget()=#MeinStringGadget.
Re: Wurden Return oder Enter gedrüct
Verfasst: 06.01.2023 13:01
von cyerangle
Euer allen erst einmal vielen Dank.
Jetzt habe ich jede Menge durch das ich mich erst einmal arbeiten muss. Da wird mir ganz schön der Schädel brummen
Re: Wurden Return oder Enter gedrüct
Verfasst: 06.01.2023 17:09
von jacdelad
Es ist im Endeffekt nicht schwer. Lerne es von Anfang an richtig und in allen Folgeprojekten kannst du es im Schlaf einfügen.
Re: Wurden Return oder Enter gedrüct
Verfasst: 06.01.2023 23:13
von Andre
Noch etliche Beispiele mehr findest du auch im englischen PB-Forum (der besseren Suchergebnisse wegen hier via Google-Suchfunktion):
https://www.google.com/search?hl=en&as_ ... type=&tbs=