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
Wurden Return oder Enter gedrüct
Wurden Return oder Enter gedrüct
Vielen Dank an Euch
und viele Grüsse
Mike

und viele Grüsse
Mike
Re: Wurden Return oder Enter gedrüct
da gibt es wohl verschiedene Möglichkeiten
Beispiel mit windows nachrichten in der hauptschleife:
Ansonsten hatte ich auch HIER mal was gepostet
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()
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
-
- Beiträge: 123
- Registriert: 22.11.2020 20:05
- Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE
Re: Wurden Return oder Enter gedrüct
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.
für dieses Beispiel mußt noch das Hauptfenster bauen - hab ich vergessen...
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
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Re: Wurden Return oder Enter gedrüct
Genau, AddKeyboardshortcut PLUS EventGadget()=#MeinStringGadget.
Guten Morgen, das ist ein schöner Tnetennba!
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Re: Wurden Return oder Enter gedrüct
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
Jetzt habe ich jede Menge durch das ich mich erst einmal arbeiten muss. Da wird mir ganz schön der Schädel brummen
Vielen Dank an Euch
und viele Grüsse
Mike

und viele Grüsse
Mike
Re: Wurden Return oder Enter gedrüct
Es ist im Endeffekt nicht schwer. Lerne es von Anfang an richtig und in allen Folgeprojekten kannst du es im Schlaf einfügen.
Guten Morgen, das ist ein schöner Tnetennba!
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
- Andre
- PureBasic Team
- Beiträge: 1765
- Registriert: 11.09.2004 16:35
- Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10 - Wohnort: Saxony / Deutscheinsiedel
- Kontaktdaten:
Re: Wurden Return oder Enter gedrüct
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=