ich habe mal wieder eine einfache Frage

Besteht die Möglichkeit

In Windows ist es in einem ListView (das ListIconGadget in PureBasic ist davon abgeleitet) nicht vorgesehen, einzelne Zeilen aus- und einzublenden. Wie RSBasic schon richtig bemerkt hat, wäre es möglich, dies mit selbst gezeichneten Zeilen im Modus "Ownerdraw" zu realisieren, was aber enorm aufwendig zu programmieren wäre, weil man dann jede Zeile selbst zeichnen und alle Klicks auf eine Zeile selbst abfangen und darauf korrekt reagieren müsste.Pelagio hat geschrieben:Besteht die Möglichkeitin einer ListIconGadget-Tabelle einzelne Zeilen aus- und einzublenden?
Code: Alles auswählen
EnableExplicit
Structure LVGROUPA Align #PB_Structure_AlignC
cbSize.l
mask.l
*pszHeader
cchHeader.l
*pszFooter
cchFooter.l
iGroupId.l
stateMask.l
state.l
uAlign.l
EndStructure
Define i.I
Define j.I
Procedure AddListIconGroup(ListIconID.I, GroupID.I, GroupText.S)
Protected Group.LVGROUPA
Protected UnicodeText.S
Group\cbSize = SizeOf(LVGROUPA)
Group\mask = #LVGF_GROUPID | #LVGF_ALIGN | #LVGF_HEADER
Group\iGroupId = GroupID
Group\uAlign = #LVGA_HEADER_LEFT
UnicodeText = Space(128)
PokeS(@UnicodeText, GroupText, -1, #PB_Unicode)
Group\pszHeader = @UnicodeText
SendMessage_(GadgetID(ListIconID), #LVM_INSERTGROUP, -1, @Group)
EndProcedure
Procedure AddListIconItem(ListIconID.I, GroupID.I, ItemText.S)
Protected Item.LVITEM
Item\mask = #LVIF_TEXT | #LVIF_GROUPID
Item\pszText = @ItemText
Item\iGroupId = GroupID
SendMessage_(GadgetID(ListIconID), #LVM_INSERTITEM, 0, @Item)
EndProcedure
Procedure ToggleGroupCollapsibility(ListIconID.I, GroupID.I)
Protected Group.LVGROUPA
If SendMessage_(GadgetID(ListIconID), #LVM_GETGROUPSTATE, GroupID,
#LVGS_COLLAPSIBLE) = 0
Group\state = #LVGS_COLLAPSIBLE
EndIf
Group\cbSize = SizeOf(LVGROUPA)
Group\mask = #LVGF_STATE
Group\iGroupId = GroupID
SendMessage_(GadgetID(ListIconID), #LVM_SETGROUPINFO, GroupID, @Group)
EndProcedure
OpenWindow(0, 100, 100, 240, 220, "Gruppe einklappbar machen")
ListIconGadget(0, 10, 10, WindowWidth(0) - 20, WindowHeight(0) - 50, "",
WindowWidth(0) - 24)
SetWindowLongPtr_(GadgetID(0), #GWL_STYLE,
GetWindowLongPtr_(GadgetID(0), #GWL_STYLE) | #LVS_NOCOLUMNHEADER)
SendMessage_(GadgetID(0), #LVM_ENABLEGROUPVIEW, 1, 0)
ButtonGadget(1, 10, GadgetHeight(0) + 20, 220, 20,
"Einklappmöglichkeit von Gruppe 1 ändern")
For j = 1 To 2
AddListIconGroup(0, j - 1, "Gruppe " + Str(j))
For i = 1 To 3
AddListIconItem(0, j - 1, "Eintrag "+ Str((j - 1) * 3 + i) +
" gehört zu Gruppe " + Str(j))
Next i
Next j
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() = 1
ToggleGroupCollapsibility(0, 0)
EndIf
EndSelect
ForEver
Code: Alles auswählen
EnableExplicit
#LVGS_NOHEADER = 4
Structure LVGROUPA Align #PB_Structure_AlignC
cbSize.l
mask.l
*pszHeader
cchHeader.l
*pszFooter
cchFooter.l
iGroupId.l
stateMask.l
state.l
uAlign.l
EndStructure
Define i.I
Define j.I
Procedure AddListIconGroup(ListIconID.I, GroupID.I, GroupHeader.S)
Protected Group.LVGROUPA
Protected UnicodeText.S
Group\cbSize = SizeOf(LVGROUPA)
Group\mask = #LVGF_GROUPID | #LVGF_ALIGN | #LVGF_HEADER
Group\iGroupId = GroupID
Group\uAlign = #LVGA_HEADER_LEFT
UnicodeText = Space(128)
PokeS(@UnicodeText, GroupHeader, -1, #PB_Unicode)
Group\pszHeader = @UnicodeText
SendMessage_(GadgetID(ListIconID), #LVM_INSERTGROUP, -1, @Group)
EndProcedure
Procedure AddListIconItem(ListIconID.I, GroupID.I, ItemText.S)
Protected Item.LVITEM
Item\mask = #LVIF_TEXT | #LVIF_GROUPID
Item\pszText = @ItemText
Item\iGroupId = GroupID
SendMessage_(GadgetID(ListIconID), #LVM_INSERTITEM, 0, @Item)
EndProcedure
Procedure ToggleGroupVisibility(ListIconID.I, GroupID.I, GroupHeader.S)
Protected Group.LVGROUPA
Protected UnicodeText.S
Group\cbSize = SizeOf(LVGROUPA)
Group\mask = #LVGF_STATE
If SendMessage_(GadgetID(ListIconID), #LVM_GETGROUPSTATE, GroupID,
#LVGS_HIDDEN) = 0
Group\state = #LVGS_COLLAPSED | #LVGS_HIDDEN
If GetGadgetState(1)
Group\mask | #LVGF_HEADER
If SendMessage_(GadgetID(ListIconID), #LVM_GETGROUPSTATE, GroupID,
#LVGS_NOHEADER) = 0
Group\state | #LVGS_NOHEADER
EndIf
EndIf
Else
If SendMessage_(GadgetID(ListIconID), #LVM_GETGROUPSTATE, GroupID,
#LVGS_NOHEADER) <> 0
Group\mask | #LVGF_ALIGN | #LVGF_HEADER
UnicodeText = Space(128)
PokeS(@UnicodeText, GroupHeader, -1, #PB_Unicode)
Group\pszHeader = @UnicodeText
Group\uAlign = #LVGA_HEADER_LEFT
EndIf
EndIf
SendMessage_(GadgetID(ListIconID), #LVM_SETGROUPINFO, GroupID, @Group)
EndProcedure
OpenWindow(0, 100, 100, 240, 250, "Gruppe 1 aus-/einblenden")
ListIconGadget(0, 10, 10, WindowWidth(0) - 20, WindowHeight(0) - 80, "",
WindowWidth(0) - 24)
SetWindowLongPtr_(GadgetID(0), #GWL_STYLE,
GetWindowLongPtr_(GadgetID(0), #GWL_STYLE) | #LVS_NOCOLUMNHEADER)
SendMessage_(GadgetID(0), #LVM_ENABLEGROUPVIEW, 1, 0)
CheckBoxGadget(1, 10, GadgetHeight(0) + 20, 220, 20,
"Gruppenüberschrift auch aus-/einblenden")
ButtonGadget(2, 10, GadgetHeight(0) + 50, 220, 20,
"Sichtbarkeit von Gruppe 1 ändern")
For j = 1 To 2
AddListIconGroup(0, j - 1, "Gruppe " + Str(j))
For i = 1 To 3
AddListIconItem(0, j - 1, "Eintrag "+ Str((j - 1) * 3 + i) +
" gehört zu Gruppe " + Str(j))
Next i
Next j
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() = 2
ToggleGroupVisibility(0, 0, "Gruppe 1")
EndIf
EndSelect
ForEver