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

Code: Alles auswählen

gtk_editable_set_position_(GadgetID(Gadget),-1)
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 ;)