Stringeingabe mit RETURN beenden [gelöst]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Stringeingabe mit RETURN beenden [gelöst]

Beitrag von Sebastian »

Gerade ärgere ich mich darüber, dass ich ein Fenster generiert habe, in welchem ein Stringgadget (und nur dies) vorhanden ist. Wenn ich diese Eingabe mit RETURN bestätige, dann passiert leider nichts, ich muss erst auf OK klicken. Wie kann ich die Eingabebestätigung mit RETURN zulassen? Muss ich dabei auf AddKeyboardShortcut zurückgreifen oder gibt es noch eine andere Möglichkeit?
Zuletzt geändert von Sebastian am 17.12.2007 20:15, insgesamt 1-mal geändert.
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

wenn du

Code: Alles auswählen

Event = EventType()
anfragst

kannst du mit:

Code: Alles auswählen

#PB_EventType_ReturnKey
Die Eingabe von 'Return' in einem StringGadget() abfragen

Code: Alles auswählen

If EventType() = #PB_EventType_ReturnKey
 ; Mache was nach RETRUN
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
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Beitrag von Sebastian »

Klasse! Genau das habe ich gesucht. VIELEN DANK!
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Beitrag von Sebastian »

:freak:
Leider funktioniert es irgendwie nicht:

Code: Alles auswählen

Repeat
EventID=WaitWindowEvent()
If (EventID=#PB_Event_Gadget And EventGadget()=#LayerWindow_Window_LayerName_Gadget_Button_OK) Or EventType()=#PB_EventType_ReturnKey
 LayerName$=GetGadgetText(#LayerWindow_Window_LayerName_Gadget_String_LayerName)
 CloseWindow(#LayerWindow_Window_LayerName)
EndIf
Until EventGadget()=#LayerWindow_Window_LayerName_Gadget_Button_OK Or EventType()=#PB_EventType_ReturnKey
Was läuft da schief? Wenn ich RETURN drücke passiert gar nichts!
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ah mist, ich glaube das es das in PB 4.x garnicht mehr gibt oder ?
...
dann wäre wohl ein AddKeyboardShortcut die einfachste lösung, da kannst du ja einfach mit abfragen ob RETURN zusätzlich noch im richtigen Gadget gedrückt wurde
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
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Code: Alles auswählen

Procedure SelectAll(StringGadget.l)
  SendMessage_(GadgetID(StringGadget), #EM_SETSEL, Len(GetGadgetText(StringGadget)), 0)
EndProcedure 

If OpenWindow(0, 0, 0, 322, 55, "StringGadget Flags", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  StringGadget(1, 8,  10, 306, 20, "Normal StringGadget...")
  AddKeyboardShortcut(0, #PB_Shortcut_Return, 4711)
EndIf
SelectAll(1)
SetActiveGadget(1)
Debug "start"
Debug GetGadgetText(1)
Repeat 
  EventID = WaitWindowEvent() 
  If EventID = #PB_Event_Menu
    If EventMenu() = 4711
      Debug "RETURN im StringGadget" 
      Debug GetGadgetText(1) 
      End
    EndIf
  EndIf
Until WaitWindowEvent() = #PB_Event_CloseWindow
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Beitrag von Sebastian »

Vielen Dank für Eure vorschläge! Ich habe das aktuelle Beispiel getestet. Es funktioniert (komisch) nicht immer. Ich muss ja keinen anderen String eingeben, ich kann ja den bestehenden stehen lassen und einfach Return drücken. Jedoch nimmt er ab und zu die Eingabe nicht... Warum?
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

hm... tut bei mir immer - solange das "End" drin is :?
keine Ahnung woher die Aussetzer kommen...

Mit ner while-wend schleife scheints aber keine Aussetzer zu geben:

Code: Alles auswählen

EventID = WaitWindowEvent()
While EventID <> #PB_Event_CloseWindow
  If (EventID = #PB_Event_Menu) 
    If EventMenu() = 4711
      Debug "RETURN im StringGadget"
      Debug GetGadgetText(1)
    EndIf
  EndIf
  EventID = WaitWindowEvent()
Wend
hdh... scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Häns
Beiträge: 47
Registriert: 27.10.2007 14:30
Wohnort: Kölle

Beitrag von Häns »

Hallo Sebastian,

das Thema hat mich auch interessiert, bis ich auf Thomas Beispiel kam: http://www.purebasic.fr/german/viewtopi ... 924#121924

Für Dich hier leicht geändert, funktioniert der Code immer und sofort, zumindest bei mir :) :

Code: Alles auswählen

Procedure SelectAll(StringGadget.l)
  SendMessage_(GadgetID(StringGadget), #EM_SETSEL, Len(GetGadgetText(StringGadget)), 0)
EndProcedure

If OpenWindow(0, #PB_Ignore, 0, 640, 480, "")
  AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)

  If CreateGadgetList(WindowID(0))
    StringGadget(0, 10, 10, 620, 30, "Hallejuja, bald ist Weihnachten!")
    SelectAll(0)

    Repeat

    SetActiveGadget(0)
    
      Select WaitWindowEvent()
        Case #PB_Event_Menu
          If EventMenu() = 0 ;Return
            If GetActiveGadget() = 0 ; Stringgadget

              MessageRequester("",GetGadgetText(0))
            EndIf
          EndIf
        Case #PB_Event_CloseWindow
          Break
      EndSelect
    ForEver   
  EndIf
EndIf


Häns
PB 5.6
Windows 7 Professional
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Beitrag von Sebastian »

Wow, ja das funktioniert. Ich wusste nicht, dass man auf ein Menu zugreifen darf (mit EventMenu()), das gar nicht existiert! Aber es läuft. Vielen Dank!
(Win 11 64-bit, PB 6.04 und 6.10)
Antworten