StringGadgetInhalt Selektieren bei Fokuserhalt

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: StringGadgetInhalt Selektieren bei Fokuserhalt

Beitrag 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.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: StringGadgetInhalt Selektieren bei Fokuserhalt

Beitrag 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
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: StringGadgetInhalt Selektieren bei Fokuserhalt

Beitrag von Bisonte »

Ok, aber nun stell dir das mit ein paar mehr StringGadgets vor ;)
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
TroaX
Beiträge: 660
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: StringGadgetInhalt Selektieren bei Fokuserhalt

Beitrag 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 ;)
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: StringGadgetInhalt Selektieren bei Fokuserhalt

Beitrag 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 ;)
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
TroaX
Beiträge: 660
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: StringGadgetInhalt Selektieren bei Fokuserhalt

Beitrag 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.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: StringGadgetInhalt Selektieren bei Fokuserhalt

Beitrag 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 
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: StringGadgetInhalt Selektieren bei Fokuserhalt

Beitrag 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 ;)
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Antworten