One year late, but here's some code to get you started. This is my first attempt at ListIconGadget Groups, so there's plenty room for improvement.
.
Code: Select all
; *****************************************************************
; ************ Requires WinXP with Skins enabled ******************
; *****************************************************************
#LVM_FIRST = $1000
#LVM_SETGROUPMETRICS = #LVM_FIRST + 155
#LVM_ENABLEGROUPVIEW = #LVM_FIRST + 157
#LVM_INSERTGROUP = #LVM_FIRST + 145
#LVGF_HEADER = 1
#LVGF_ALIGN = 8
#LVGF_STATE = 4
#LVGF_GROUPID = $10
#LVGMF_BORDERCOLOR = 2
#LVGMF_BORDERSIZE = 1
#LVGMF_NONE = 0
#LVGMF_TEXTCOLOR = 4
#LVGA_HEADER_CENTER = 2
#LVGA_HEADER_LEFT = 1
#LVGA_HEADER_RIGHT = 4
#LVIF_GROUPID = $100
#LVIF_IMAGE = 2
#LVIF_TEXT = 1
; --> Structure used tp define Group
Structure myLVGROUP
cbSize.l
mask.l
pszHeader.l
cchHeader.l
pszFooter.l
cchFooter.l
iGroupId.l
stateMask.l
state.l
uAlign.l
EndStructure
lvGroup.myLVGROUP
; --> Structure used for placing item into it's Group
Structure myLVITEM
mask.l
iItem.l
iSubItem.l
state.l
stateMask.l
pszText.l
cchTextMax.l
iImage.l
lParam.l
iIndent.l
iGroupId.l
cColumns.l
puColumns.l
EndStructure
lvitemgroup.myLVITEM
; --> Structure used for changing Group colors
Structure myLVGROUPMETRICS
cbSize.l
mask.l
left.l
top.l
right.l
bottom.l
crLeft.l
crTop.l
crRight.l
crBottom.l
crHeader.l
crFooter.l
EndStructure
lvGM.myLVGROUPMETRICS
; --> Create 3 Group images
redImg = CreateImage(0, 16, 16)
StartDrawing(ImageOutput())
Box(0, 0, 16, 16, RGB(255, 0, 0))
StopDrawing()
greenImg = CreateImage(1, 16, 16)
StartDrawing(ImageOutput())
Box(0, 0, 16, 16, RGB(0, 255, 0))
StopDrawing()
blueImg = CreateImage(2, 16, 16)
StartDrawing(ImageOutput())
Box(0, 0, 16, 16, RGB(0, 0, 255))
StopDrawing()
If OpenWindow(0, 0, 0, 500, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "ListIconGadget Groups") And CreateGadgetList(WindowID(0))
ListIconGadget(0, 10, 10, 480, 280, "", 200)
ChangeListIconGadgetDisplay(0, 1)
For i = 0 To 3
item$ = "Item " + Str(i)
AddGadgetItem(0 , i, item$, redImg)
Next i
For i = 4 To 7
item$ = "Item " + Str(i)
AddGadgetItem(0 , i, item$, greenImg)
Next i
For i = 8 To 11
item$ = "Item " + Str(i)
AddGadgetItem(0 , i, item$, blueImg)
Next i
; --> Enable Group view
SendMessage_(GadgetID(0), #LVM_ENABLEGROUPVIEW , #True, 0)
lvGroup\cbSize = SizeOf(myLVGROUP)
lvGroup\mask = #LVGF_HEADER | #LVGF_GROUPID | #LVGF_ALIGN
; --> Create Group 0
group$ = "Red Group"
sLen = MultiByteToWideChar_(#CP_ACP, 0, group$, -1, 0, 0)
GroupName$ = Space(sLen*2)
MultiByteToWideChar_(#CP_ACP, 0, group$, -1, @GroupName$, sLen)
lvGroup\pszHeader = @GroupName$
lvGroup\cchHeader = sLen*2
lvGroup\iGroupId = 0
lvGroup\uAlign = #LVGA_HEADER_LEFT
SendMessage_(GadgetID(0), #LVM_INSERTGROUP, 0, lvGroup)
; --> Create Group 1
group$ = "Green Group"
sLen = MultiByteToWideChar_(#CP_ACP, 0, group$, -1, 0, 0)
GroupName$ = Space(sLen*2)
MultiByteToWideChar_(#CP_ACP, 0, group$, -1, @GroupName$, sLen)
lvGroup\pszHeader = @GroupName$
lvGroup\cchHeader = sLen*2
lvGroup\iGroupId = 1
lvGroup\uAlign = #LVGA_HEADER_LEFT
SendMessage_(GadgetID(0), #LVM_INSERTGROUP, 1, lvGroup)
; --> Create Group 2
group$ = "Blue Group"
sLen = MultiByteToWideChar_(#CP_ACP, 0, group$, -1, 0, 0)
GroupName$ = Space(sLen*2)
MultiByteToWideChar_(#CP_ACP, 0, group$, -1, @GroupName$, sLen)
lvGroup\pszHeader = @GroupName$
lvGroup\cchHeader = sLen*2
lvGroup\iGroupId = 2
lvGroup\uAlign = #LVGA_HEADER_LEFT
SendMessage_(GadgetID(0), #LVM_INSERTGROUP, 2, lvGroup)
; --> Change Group header text color
; --> AFAIK, Group Metrics applies to all Groups
lvGM\cbSize = SizeOf(myLVGROUPMETRICS)
lvGM\mask = #LVGMF_TEXTCOLOR
lvGM\crHeader = RGB(100, 50, 100)
SendMessage_(GadgetID(0), #LVM_SETGROUPMETRICS, 0, lvGM)
; --> Place items 0 - 3 into Group 0
For r = 0 To 3
lvitemgroup\mask = #LVIF_GROUPID
lvitemgroup\iItem = r
lvitemgroup\iGroupId = 0
SendMessage_(GadgetID(0), #LVM_SETITEM, r, lvitemgroup)
Next r
; --> Place items 4 - 7 into Group 1
For g = 4 To 7
lvitemgroup\mask = #LVIF_GROUPID
lvitemgroup\iItem = g
lvitemgroup\iGroupId = 1
SendMessage_(GadgetID(0), #LVM_SETITEM, g, lvitemgroup)
Next g
; --> Place items 8 - 11 into Group 2
For b = 8 To 11
lvitemgroup\mask = #LVIF_GROUPID
lvitemgroup\iItem = b
lvitemgroup\iGroupId = 2
SendMessage_(GadgetID(0), #LVM_SETITEM, b, lvitemgroup)
Next b
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf