Wurden Return oder Enter gedrüct

Anfängerfragen zum Programmieren mit PureBasic.
cyerangle
Beiträge: 46
Registriert: 15.10.2022 13:46
Computerausstattung: Apple iMac 8 GB 3TB

Wurden Return oder Enter gedrüct

Beitrag 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
Vielen Dank an Euch :praise:
und viele Grüsse
Mike
Axolotl
Beiträge: 278
Registriert: 31.12.2008 16:34

Re: Wurden Return oder Enter gedrüct

Beitrag 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
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
jogo
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

Beitrag 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...
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: Wurden Return oder Enter gedrüct

Beitrag von jacdelad »

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
cyerangle
Beiträge: 46
Registriert: 15.10.2022 13:46
Computerausstattung: Apple iMac 8 GB 3TB

Re: Wurden Return oder Enter gedrüct

Beitrag 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
Vielen Dank an Euch :praise:
und viele Grüsse
Mike
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: Wurden Return oder Enter gedrüct

Beitrag 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.
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
Benutzeravatar
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

Beitrag 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=
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Antworten