"Enter" setzten

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

"Enter" setzten

Beitrag von X360 Andy »

Ich möchte gern wenn man in ein StringGadget einen Text eingibt und den "Enter/Return" drückt es weiter geht.
Also das er den Text "annimmt"
Schwer zu erklären :roll:


Code: Alles auswählen

If KeyboardPushed(#PB_Key_return)

;Was muss ich jetzt hier reinmachen damit der "Weiter" Button gedrückt wird ?

EndIf
Wüsste nicht was ich in die suche eingeben müsste :lol:


Das wäre der Button:
COLOR_BUTTON (5,45, 55, 80, 20,$000000,RGB(255, 0, 0),"Weiter")
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Für Fenster/Gadget ist :
AddKeyboardShortcut(#Window, Shortcut, Event)

Mehr dazu steht in der PB-Hilfe
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

dankschöö
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

Ich versteh nicht was daran falsch ist
Ich hab ne menge rumprobiert aber es passiert einfach nichts.(<-- Oder kommen Fehlermeldungen)

Ich möchte, das wenn ich Enter drücke, das ein Button gedrückt wird.
Wenn der Button gedrückt wird , wird ein Inhalt in ein Editor Gadget hinzugefügt.

Code: Alles auswählen

Procedure Bot()

  If OpenWindow(#Window_0, 556, 84, 391, 230, "X Tista",  #PB_Window_SystemMenu  | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
.......
      SetWindowColor(Window_0,RGB(255,255,255))
      AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, #Enter)
    EndIf
  EndIf
EndProcedure

Code: Alles auswählen


 Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow 
      Quit = 1
    EndIf
    If EventID = #PB_Event_Gadget
     If  EventMenu() = #enter
     Debug "Enter"
     EndIf
    EndIf
   Until Quit=1

kann mir vieleicht jemand sagen was ich falsch mache ?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Code: Alles auswählen

    If EventID = #PB_Event_Gadget 
     If  EventMenu() = #enter 
     Debug "Enter" 
     EndIf 
    EndIf 
das ist falsch, denn wenn das Event eine GadgetEvent war, kommt kein Menüevent.

Also für den Tastendruck:

Code: Alles auswählen

    If EventID = #PB_Event_Menu 
     If  EventMenu() = #enter 
     Debug "Enter" 
     EndIf 
    EndIf 
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

:roll: danke ....
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Hat mich auch interessiert und hier eine einfache lösung mit keybd_event...

Code: Alles auswählen

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window
EndEnumeration

;- Gadget Constants
;
Enumeration
  #String_0
  #String_1
  #String_2
  #String_3
  #String_4
  #String_5
  #String_6
  #String_7
  #String_8
  #String_9
  #String_10
  #String_11
  #Button_Ok
EndEnumeration

Enumeration
  #Menu_Enter
EndEnumeration

Procedure Open_Window()
  If OpenWindow(#Window, 266, 170, 600, 300, "Eingabe",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window))
      StringGadget(#String_0, 10, 10, 100, 30, "")
      StringGadget(#String_1, 10, 50, 100, 30, "")
      StringGadget(#String_2, 10, 90, 100, 30, "")
      StringGadget(#String_3, 10, 130, 100, 30, "")
      StringGadget(#String_4, 10, 170, 100, 30, "")
      StringGadget(#String_5, 10, 210, 100, 30, "")
      StringGadget(#String_6, 130, 10, 100, 30, "")
      StringGadget(#String_7, 130, 50, 100, 30, "")
      StringGadget(#String_8, 130, 90, 100, 30, "")
      StringGadget(#String_9, 130, 130, 100, 30, "")
      StringGadget(#String_10, 130, 170, 100, 30, "")
      StringGadget(#String_11, 130, 210, 100, 30, "")
      ButtonGadget(#Button_Ok, 10, 260, 100, 30, "Ok")
      
    EndIf
  EndIf
EndProcedure



Open_Window()

AddKeyboardShortcut(#Window, #PB_Shortcut_Return, #Menu_Enter)
 
Repeat
  event = WaitWindowEvent()
  Select event 
    Case #PB_Event_CloseWindow
      exit = 1
    Case #PB_Event_Menu
      Select EventMenu()
        Case #Menu_Enter
          Debug "Enter"
          If GetActiveGadget() = #Button_Ok
            Debug "Button"
          EndIf
          
          keybd_event_(#VK_TAB,0,0,0)
          keybd_event_(0,0,#KEYEVENTF_KEYUP,0)
              
      EndSelect  
  EndSelect
Until exit
FF :wink:

Kleines Update
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

Ich würde die Finger von der AddKeyboardShortcut() Geschichte lassen, es ist totaler bockmist wenn dadruch irgendwelche Fenster eingaben blockiert werden, ich benutz da lieber #wm_keyup oder andere API Konzepte.

Anregung:

Code: Alles auswählen

EnableExplicit

OpenWindow(0, 0, 0, 200, 100, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 TextGadget(0, 5, 5, WindowWidth(0) - 10, WindowHeight(0) - 10, "", #PB_Text_Center)
  SetGadgetFont(0, FontID(LoadFont(#PB_Any, "Arial", 25)))

Define WinEvent.i, Time.i

Repeat

 WinEvent = WaitWindowEvent(10)
 
 If timeGetTime_() - Time >= 1500 And GetGadgetText(0) <> ""
  Time = timeGetTime_()
  SetGadgetText(0, "")
 EndIf
 
 If WinEvent = #WM_KEYUP

  Select EventwParam()
   Case #VK_F1
    SetGadgetText(0, "F1")
    Time = timeGetTime_()
   Case #VK_RETURN
    SetGadgetText(0, "Enter")
    Time = timeGetTime_()
   Case #VK_ESCAPE
    End
  EndSelect
 
 EndIf
 
Until WinEvent = #PB_Event_CloseWindow
Funktioniert natürlich nicht unter Linux und sollte wohl auch besser im WindowCallback gesetzt werden^^
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Auch mit "AddKeyboardShortcut(#Window, #PB_Shortcut_Return, #Menu_Enter)" kommen die Events für WM_KeyUp und Down durch. Damit wird nichts mit blockiert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

mk-soft hat geschrieben:Auch mit "AddKeyboardShortcut(#Window, #PB_Shortcut_Return, #Menu_Enter)" kommen die Events für WM_KeyUp und Down durch. Damit wird nichts mit blockiert.

Code: Alles auswählen

OpenWindow(0, 0, 0, 400, 200, "Fenster", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 StringGadget(0, 5, 5, 380, 20, "Versuch mal diesen Text zu löschen")
 
 AddKeyboardShortcut(0, #PB_Shortcut_Delete, 0)
 AddKeyboardShortcut(0, #PB_Shortcut_Back, 1)
 
 While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Antworten