Seite 1 von 2
Stringeingabe mit RETURN beenden [gelöst]
Verfasst: 17.12.2007 13:36
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?
Verfasst: 17.12.2007 13:41
von STARGÅTE
wenn du
anfragst
kannst du mit:
Die Eingabe von 'Return' in einem StringGadget() abfragen
Code: Alles auswählen
If EventType() = #PB_EventType_ReturnKey
; Mache was nach RETRUN
EndIf
Verfasst: 17.12.2007 13:54
von Sebastian
Klasse! Genau das habe ich gesucht. VIELEN DANK!
Verfasst: 17.12.2007 14:08
von Sebastian
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!
Verfasst: 17.12.2007 14:40
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
Verfasst: 17.12.2007 15:04
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
Verfasst: 17.12.2007 16:25
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?
Verfasst: 17.12.2007 17:01
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
Verfasst: 17.12.2007 18:40
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
Verfasst: 17.12.2007 19:55
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!