Seite 1 von 1
Explorerlistgadget mit störendem Fokusrahmen
Verfasst: 02.09.2023 18:24
von bin_neu_hier
Hallo allerseits,
mich stört in einem Explorerlistgadget, dass a immer ein Fokusrahmen stehen bleibt. Im Beispiel
Code: Alles auswählen
If OpenWindow(0, 0, 0, 800, 600, "ExplorerListGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ExplorerListGadget(0, 0, 0, 400, 600, GetUserDirectory(#PB_Directory_Documents)+"*.*", #PB_Explorer_MultiSelect)
ExplorerListGadget(1, 401, 0, 400, 600, GetUserDirectory(#PB_Directory_Documents)+"*.*", #PB_Explorer_MultiSelect)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
wählt man beispielsweise ein paar Einträge aus. Klickt man auf den leeren Bereich, ist die Auswahl zwar aufgehoben, es bleibt aber ein Fokusrahmen um einen Eintrag. klickt man im anderen Gadget dann rum (Fokus ist nach meinem Verständnis dann auf dem anderen Gadget), bleibt trotzdem noch "ein Rest" der Selektion zu sehen - das Gadget "merkt" sich also die Selektion.
Wie kann man das "Gedächtnis" löschen, also den Zustand, nachdem das Gadget das Laufwerk bzw. das Verzeichnis eingelesen hat und bevor die erste Selektion stattgefunden hat, wiederherstellen? Idealerweise, ohne das das Laufwerk bzw. das Verzeichnis neu einzulesen, was bei größeren Verzeichnissen schon dauern kann. Gibt es eine Refresh_my_Gadget-Funktion?
Re: Explorerlistgadget mit störendem Fokusrahmen
Verfasst: 02.09.2023 19:11
von RSBasic
Reicht es dir aus, den gepunkteten Fokusrahmen dauerhaft auszublenden?
Code: Alles auswählen
EnableExplicit
Macro MAKELONG(loword, hiword)
(hiword << 16 | loword)
EndMacro
If OpenWindow(0, 0, 0, 800, 650, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ExplorerListGadget(0, 0, 0, 400, 600, GetUserDirectory(#PB_Directory_Documents)+"*.*", #PB_Explorer_MultiSelect )
ExplorerListGadget(1, 401, 0, 400, 600, GetUserDirectory(#PB_Directory_Documents)+"*.*", #PB_Explorer_MultiSelect)
ButtonGadget(2, 10, 620, 200, 20, "Enable focus border...", 0)
ButtonGadget(3, 220, 620, 200, 20, "Disable focus border...", 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 2
SendMessage_(GadgetID(0), #WM_CHANGEUISTATE, MakeLong(#UIS_CLEAR, #UISF_HIDEFOCUS), 0)
SendMessage_(GadgetID(1), #WM_CHANGEUISTATE, MakeLong(#UIS_CLEAR, #UISF_HIDEFOCUS), 0)
Case 3
SendMessage_(GadgetID(0), #WM_CHANGEUISTATE, MakeLong(#UIS_SET, #UISF_HIDEFOCUS), 0)
SendMessage_(GadgetID(1), #WM_CHANGEUISTATE, MakeLong(#UIS_SET, #UISF_HIDEFOCUS), 0)
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Re: Explorerlistgadget mit störendem Fokusrahmen
Verfasst: 02.09.2023 20:46
von bin_neu_hier
Hallo RSBasic,
vielen Dank für den Input. Leider ist das nicht die optimale Lösung. Da bleiben trotzdem noch "alte" Selektionen bestehen.
Re: Explorerlistgadget mit störendem Fokusrahmen
Verfasst: 03.09.2023 12:26
von mk-soft
Hast du dich im englischen angemeldet?
Da ein ähnlicher Beitrag ist
Code: Alles auswählen
Enumeration CustomTypeEvent #PB_EventType_FirstCustomValue
#MyEventTypeFocus
#MyEventTypeLostFocus
EndEnumeration
Procedure DoGadgetEventFocus()
Static gadget, lastgadget = -1
gadget = GetActiveGadget()
If gadget <> lastgadget
If lastgadget >= 0
PostEvent(#PB_Event_Gadget, GetActiveWindow(), lastgadget, #MyEventTypeLostFocus)
EndIf
If gadget >= 0
PostEvent(#PB_Event_Gadget, GetActiveWindow(), gadget, #MyEventTypeFocus)
lastgadget = gadget
Else
lastgadget = -1
EndIf
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 800, 600, "ExplorerListGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ExplorerListGadget(0, 0, 0, 400, 600, GetUserDirectory(#PB_Directory_Documents)+"*.*", #PB_Explorer_MultiSelect)
ExplorerListGadget(1, 401, 0, 400, 600, GetUserDirectory(#PB_Directory_Documents)+"*.*", #PB_Explorer_MultiSelect)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 0
Select EventType()
Case #MyEventTypeFocus
Debug "Focus Gadget 0"
Case #MyEventTypeLostFocus
Debug "LostFocus Gadget 0"
SendMessage_(GadgetID(0), #LVM_SETSELECTIONMARK, 0, -1)
EndSelect
; SetGadgetText(1,GetUserDirectory(#PB_Directory_Documents)+"*.*")
Case 1
Select EventType()
Case #MyEventTypeFocus
Debug "Focus Gadget 1"
Case #MyEventTypeLostFocus
Debug "LostFocus Gadget 1"
SendMessage_(GadgetID(0), #LVM_SETSELECTIONMARK, 0, -1)
EndSelect
; SetGadgetText(0,GetUserDirectory(#PB_Directory_Documents)+"*.*")
EndSelect
EndSelect
DoGadgetEventFocus()
Until Quit = 1
EndIf
Re: Explorerlistgadget mit störendem Fokusrahmen
Verfasst: 03.09.2023 17:30
von HeX0R
mk-soft hat geschrieben: 03.09.2023 12:26
Da ein ähnlicher Beitrag ist
Recht Du hast junger Padavan!
Re: Explorerlistgadget mit störendem Fokusrahmen
Verfasst: 10.09.2023 09:26
von bin_neu_hier
Jep, habe das dann auch mal im Englischen gefragt. Aber leider erfolglos, es läuft in jedem Fall darauf hinaus, das jeweilige Verzeichnis neu einzulesen - aber dann isses halt so.
Natürlich seid Ihr alle im deutschen Forum meine erste Wahl, ohne Euch wäre ich aufgeschmissen und kann Euch gar nicht genug dankbar sein für Eure Unterstützung und euren Enthusiasmus. Werde das wahrscheinlich niemals hier in diesem Forum "zurückzahlen" können und bemühe mich daher, in anderen Bereichen eine ähnlich gute Hilfe und Unterstützung geben zu können. Falls also jemand mal den Rat eines Landschaftsgärtners bräuchte ...
Re: Explorerlistgadget mit störendem Fokusrahmen
Verfasst: 10.09.2023 12:09
von mk-soft
Hast du meinen Code nicht ausprobiert, oder sollen für eine andere OS sein?