Seite 2 von 2
Re: StringGadgetInhalt Selektieren bei Fokuserhalt
Verfasst: 17.07.2017 20:32
von Nino
Bisonte hat geschrieben:Und nochmal nebenbei : Wenn das "deselektieren" automatisch bei LostFocus
gemacht wird, kann man mit dem selektierten Inhalt nichts anfangen (Rechtsklick und kopieren
ist Fokusverlust, weil ein Popupmenu aufgeht!)
Ich hatte hier auch nur einen kleinen Demo-Code geschrieben, in dem der Effekt wenn die Selektion aufgehoben wird nachvollziehbar (also zu sehen) sein sollte, und in dem es kein Popup-Menü o.Ä. gibt.
Re: StringGadgetInhalt Selektieren bei Fokuserhalt
Verfasst: 17.07.2017 20:54
von ccode_new
Hi Linuxianer,
so würde es gehen:
Code: Alles auswählen
Global sel = #False
Procedure.i MyStringEvent()
If Not sel
sel = #True
EndIf
EndProcedure
OpenWindow(0, 0, 0, 200, 100, "Autoselect text", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(1, 10, 10, 20, 20, "A")
StringGadget(2, 50, 40, 100, 20, "Test")
BindGadgetEvent(2, @MyStringEvent(), #PB_EventType_Focus)
Repeat
If sel
gtk_editable_select_region_(GadgetID(2), 0, Len(GetGadgetText(2)))
sel = #False
EndIf
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
Re: StringGadgetInhalt Selektieren bei Fokuserhalt
Verfasst: 17.07.2017 23:46
von Bisonte
Ok, aber nun stell dir das mit ein paar mehr StringGadgets vor

Re: StringGadgetInhalt Selektieren bei Fokuserhalt
Verfasst: 17.07.2017 23:50
von TroaX
Bisonte hat geschrieben:Ok, aber nun stell dir das mit ein paar mehr StringGadgets vor

Kannst auch statt #True oder #False auch einfach die Gadget-ID als Wert für sel nehmen und wenn keines selektiert ist, den Wert auf 0 setzen. Es kann eh nur ein Gadget zur Zeit selektiert sein

Re: StringGadgetInhalt Selektieren bei Fokuserhalt
Verfasst: 17.07.2017 23:52
von Bisonte
Dann ist meine kleine AutoSelString() Proc genau das gleiche in grün ... In beiden hat man
in der Eventloop etwas zu bestellen... Wobei dann bei mir das BindGadgetEvent völlig
wegfällt, also eine Fehlerquelle weniger

Re: StringGadgetInhalt Selektieren bei Fokuserhalt
Verfasst: 18.07.2017 00:12
von TroaX
Mal so als Frage. Hast du mal versucht, mit
das setzen der Cursor-Position vorab zu erzwingen?
Also:
Code: Alles auswählen
gtk_editable_set_position_(GadgetID(Gadget),-1)
gtk_editable_select_region_(GadgetID(Gadget), 0, Len(GetGadgetText(Gadget)))
Denn ich werde irgendwie dieses merkwürdige Gefühl nicht los, das dieser Effekt daher kommt, das durch BindEventGadget erst der Cursor nach der Ausführung gesetzt wird, wodurch die Slektierung aufgehoben werden könnte. Vielleicht kannst du das damit brechen. ich kann es selber nicht testen, da kein Linux und somit kein GTK. Aber das hätte ich auch jeden Fall mal probiert.
Re: StringGadgetInhalt Selektieren bei Fokuserhalt
Verfasst: 18.07.2017 21:59
von HeX0R
Eine "von hinten durch die Brust ins Auge"-Lösung
Code: Alles auswählen
#MY_EVENT = #PB_Event_FirstCustomValue
Procedure.i MyStringEvent()
Gadget = EventGadget()
gtk_editable_select_region_(GadgetID(Gadget), 0, Len(GetGadgetText(Gadget)))
EndProcedure
Procedure MyStringEventA()
PostEvent(#MY_EVENT, 0, EventGadget())
EndProcedure
OpenWindow(0, 0, 0, 200, 100, "Autoselect text", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(1, 10, 10, 20, 20, "A")
StringGadget(2, 50, 40, 100, 20, "Test")
BindGadgetEvent(2, @MyStringEventA(), #PB_EventType_Focus)
BindEvent(#MY_EVENT, @MyStringEvent(), 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
Re: StringGadgetInhalt Selektieren bei Fokuserhalt
Verfasst: 19.07.2017 09:57
von Bisonte
Also der Versuch, die Position vorher zu setzen bringt auch nichts.
Und die Lösung von HeX0r gefällt mir

(Sie funktioniert)
Fehlt jetzt nur noch Mac
