Gelöst! Listicongadget mit "ohne Selektion"

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

Gelöst! Listicongadget mit "ohne Selektion"

Beitrag von bin_neu_hier »

Moin Leute,

habe ein Listicongadget, in dem der User alle möglichen Zeilen selektieren kann. Und natürlich auch wieder de-selektieren. Und genau da ist mein Problem: wie kann ich feststellen, dass alle ehemaligen Selektionen wieder weg sind.
Beispiel:

Code: Alles auswählen

win = OpenWindow(#PB_Any, 0, 0, 500, 500, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If win
  ligflag = #PB_ListIcon_MultiSelect|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#LVS_NOCOLUMNHEADER
  lig = ListIconGadget(#PB_Any,  0, 0, WindowWidth(win), WindowHeight(win), "Col 1", 100,ligflag)
  AddGadgetColumn(lig, 1, "Col 2", 100)
  AddGadgetColumn(lig, 2, "Col 3", 100)
  AddGadgetColumn(lig, 3, "Col 4", 100)
  
  For i = 0 To 10 
    AddGadgetItem(lig, -1, "bla bla bla" + Chr(10) + "zz zz zz" + Chr(10) + "abc abc" + Chr(10) + "xyz xyz" )
  Next
  
  Repeat
    WEvent = WaitWindowEvent()
    Gadget = EventGadget()
    
    Select WEvent
      Case #PB_Event_CloseWindow
        End
    EndSelect
    
    Select Gadget
      Case lig
        Select EventType()
          Case #PB_EventType_LeftClick
            i = GetGadgetState(Gadget)
            If i > -1 ;wenn mindestens 1 Eintrag ausgewählt
              x = 0
              For n = 0 To CountGadgetItems(Gadget)-1
                If GetGadgetItemState(Gadget, n) & #PB_ListIcon_Selected
                  x + 1
                EndIf
              Next
              Debug "Markiert: "+Str(x)+" Einträge"
            Else
              Debug "Markiert: nix"
            EndIf
            
          Case #PB_EventType_LeftDoubleClick
          Case #PB_EventType_RightClick
          Case #PB_EventType_RightDoubleClick
            
        EndSelect
    EndSelect
    
  ForEver
EndIf
wie muss ich das machen, dass - wenn die letzte verbliebene Selektion deselektiert wurde - festgestellt werden kann, dass nichts mehr selektiert ist.
Das DEBUG "Markiert: nix" wird nicht ausgeführt.
Zuletzt geändert von bin_neu_hier am 30.07.2023 18:29, insgesamt 1-mal geändert.
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: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Listicongadget mit "ohne Selektion"

Beitrag von mk-soft »

Teste auf #PB_EventType_Change
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
SMaag
Beiträge: 184
Registriert: 08.05.2022 12:58

Re: Listicongadget mit "ohne Selektion"

Beitrag von SMaag »

Code: Alles auswählen

win = OpenWindow(#PB_Any, 0, 0, 500, 500, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If win
  ligflag = #PB_ListIcon_MultiSelect|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#LVS_NOCOLUMNHEADER
  lig = ListIconGadget(#PB_Any,  0, 0, WindowWidth(win), WindowHeight(win), "Col 1", 100,ligflag)
  AddGadgetColumn(lig, 1, "Col 2", 100)
  AddGadgetColumn(lig, 2, "Col 3", 100)
  AddGadgetColumn(lig, 3, "Col 4", 100)
  
  For i = 0 To 10 
    AddGadgetItem(lig, -1, "bla bla bla" + Chr(10) + "zz zz zz" + Chr(10) + "abc abc" + Chr(10) + "xyz xyz" )
  Next
  
  Repeat
    WEvent = WaitWindowEvent()
    Gadget = EventGadget()
    
    Select WEvent
      Case #PB_Event_CloseWindow
        End
    EndSelect
    
    Select Gadget
      Case lig
        evt = EventType()
        
        If evt <> -1
          Debug "EventType = " + evt
        EndIf 
      
        Select evt
            
          Case #PB_EventType_LeftClick
            Debug "left click"
            
            i = GetGadgetState(Gadget)
            If i > -1 ;wenn mindestens 1 Eintrag ausgewählt
              x = 0
              For n = 0 To CountGadgetItems(Gadget)-1
                If GetGadgetItemState(Gadget, n) & #PB_ListIcon_Selected
                  x + 1
                EndIf
              Next
              Debug "Markiert: "+Str(x)+" Einträge"
            Else
              Debug "Markiert: nix"
            EndIf
            
          Case #PB_EventType_LeftDoubleClick
            Debug "left doubleklick"
          Case #PB_EventType_RightClick
            Debug "right click"
          Case #PB_EventType_RightDoubleClick
            Debug "right doubleclick"
            
        EndSelect
    EndSelect
    
  ForEver
EndIf

es ist ein etwas komisches verhalten, des ListIcon Gadget.
Trotz Click kommt kein Click-Ereignis, nur 768 = #PB_EventType_Change.
Erst bei Doppelklick kommt zuerst das DblClick und kurz danach noch das Click Ereignis!

Beim right click ist es genau anders herum! Es kommt zuerst das Click und dann das CblClick

Korrekt sieht mir das nicht aus!


Markiert: 1 Einträge
EventType = 768 ; das ist #PB_EventType_Change
EventType = 0
left click
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Re: Gelöst! Listicongadget mit "ohne Selektion"

Beitrag von bin_neu_hier »

Hallo allerseits,

ja, mit #PB_EventType_Change kann man das regeln. Vielen Dank an mk-soft und SMaag für die Unterstützung!
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.
Antworten