Explorerlistgadget mit störendem Fokusrahmen

Anfängerfragen zum Programmieren mit PureBasic.
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Explorerlistgadget mit störendem Fokusrahmen

Beitrag 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?
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Explorerlistgadget mit störendem Fokusrahmen

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Re: Explorerlistgadget mit störendem Fokusrahmen

Beitrag 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.
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Explorerlistgadget mit störendem Fokusrahmen

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Explorerlistgadget mit störendem Fokusrahmen

Beitrag von HeX0R »

mk-soft hat geschrieben: 03.09.2023 12:26 Da ein ähnlicher Beitrag ist
Recht Du hast junger Padavan!
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Re: Explorerlistgadget mit störendem Fokusrahmen

Beitrag 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 ...
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Explorerlistgadget mit störendem Fokusrahmen

Beitrag von mk-soft »

Hast du meinen Code nicht ausprobiert, oder sollen für eine andere OS sein?
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten