You can't use it and SetGadgetItemImage in the same code as that command clears the ListIconGadget image list as does ClearGadgetItems. So either you have icons in one column only with the pb command or any column you like with this one.
Otherwise, you'd have to remember to put BuildImageList in many, many places:):)
Use it, or not :)
; // Visual designer created form code //
Define EventID, MenuID, GadgetID, WindowID
;- Window Constants
Enumeration 1
#Window_ChangeIconTest
EndEnumeration
#WindowIndex = #PB_Compiler_EnumerationValue
;- Gadget Constants
Enumeration 1
; Window_ChangeIconTest
#Gadget_ChangeIconTest_Itemlist
#Gadget_ChangeIconTest_Changeicon
#Gadget_ChangeIconTest_Exitdaproggi
EndEnumeration
#GadgetIndex = #PB_Compiler_EnumerationValue
Procedure.i Window_ChangeIconTest()
If OpenWindow(#Window_ChangeIconTest, 0, 0, 820, 600, "Change icon API test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
ListIconGadget(#Gadget_ChangeIconTest_Itemlist, 5, 5, 810, 555, "Randomtext", 200, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(#Gadget_ChangeIconTest_Itemlist, 1, "Otherstuff", 200)
AddGadgetColumn(#Gadget_ChangeIconTest_Itemlist, 2, "Dontknow", 200)
AddGadgetColumn(#Gadget_ChangeIconTest_Itemlist, 3, "Burntoast", 200)
ButtonGadget(#Gadget_ChangeIconTest_Changeicon, 5, 565, 195, 30, "Random icon change")
SetGadgetFont(#Gadget_ChangeIconTest_Changeicon, LoadFont(#Gadget_ChangeIconTest_Changeicon, "Comic Sans MS", 12))
ButtonGadget(#Gadget_ChangeIconTest_Exitdaproggi, 620, 565, 195, 30, "Exit program now")
SetGadgetFont(#Gadget_ChangeIconTest_Exitdaproggi, LoadFont(#Gadget_ChangeIconTest_Exitdaproggi, "Comic Sans MS", 12))
HideWindow(#Window_ChangeIconTest, #False)
ProcedureReturn WindowID(#Window_ChangeIconTest)
EndIf
EndProcedure
; // All program specific variables, structures etc //
#ListIconHeadingArea = -1 ;
#AtTheEndOfTheList = -1 ;
; // Add icons to rows other than the first one in ListIconGadget //
#LVM_SETEXTENDEDLISTVIEWSTYLE = $1036 ;
#LVS_EX_SUBITEMIMAGES = $2 ;
; // //
Enumeration 1
#Image_ListNormal ;
#Image_ListEmpty ;
#Image_ListArchived ;
#Image_ListDeleted ;
#Image_ListFavourite ;
#Image_ListLocked ;
EndEnumeration
#ImageIndex = #PB_Compiler_EnumerationValue
; // // _16x16
CatchImage(#Image_ListNormal, ?_Image_ListNormal) ;
CatchImage(#Image_ListEmpty, ?_Image_ListEmpty) ;
CatchImage(#Image_ListArchived, ?_Image_ListArchived) ;
CatchImage(#Image_ListDeleted, ?_Image_ListDeleted) ;
CatchImage(#Image_ListFavourite, ?_Image_ListFavourite) ;
CatchImage(#Image_ListLocked, ?_Image_ListLocked) ;
; // //
Structure IconData
HeaderListIcon.i ; ListIconGadget image list handle
ListNormal.i ;
ListEmpty.i ;
ListArchived.i ;
ListDeleted.i ;
ListFavourite.i ;
ListLocked.i ;
EndStructure
; // //
Global Icon.IconData ;
; // //
Declare BuildImageList(Gadget.i) ;
Declare ChangeIcon(MyGadget.i, MyRow.i, MyColumn.i, MyIcon.i) ;
; // //
DataSection
_Image_ListNormal: : IncludeBinary "Images\_16x16\Normal.ico" ;
_Image_ListEmpty: : IncludeBinary "Images\_16x16\Empty.ico" ;
_Image_ListArchived: : IncludeBinary "Images\_16x16\Archived.ico" ;
_Image_ListDeleted: : IncludeBinary "Images\_16x16\Deleted.ico" ;
_Image_ListFavourite: : IncludeBinary "Images\_16x16\Favourite.ico" ;
_Image_ListLocked: : IncludeBinary "Images\_16x16\Locked.ico" ;
EndDataSection
; // Rebuild the image list as it gets trashed by the clear command //
Procedure BuildImageList(Gadget.i)
; Create a new image list for the ListIconGadget if it doesn't exist or has been destroyed
If Icon\HeaderListIcon = #False
Icon\HeaderListIcon = ImageList_Create_(16, 16, #ILC_MASK | #ILC_COLOR32, 0, 6)
Icon\ListEmpty = ImageList_ReplaceIcon_(Icon\HeaderListIcon, #AtTheEndOfTheList, ImageID(#Image_ListEmpty))
Icon\ListNormal = ImageList_ReplaceIcon_(Icon\HeaderListIcon, #AtTheEndOfTheList, ImageID(#Image_ListNormal))
Icon\ListArchived = ImageList_ReplaceIcon_(Icon\HeaderListIcon, #AtTheEndOfTheList, ImageID(#Image_ListArchived))
Icon\ListDeleted = ImageList_ReplaceIcon_(Icon\HeaderListIcon, #AtTheEndOfTheList, ImageID(#Image_ListDeleted))
Icon\ListFavourite = ImageList_ReplaceIcon_(Icon\HeaderListIcon, #AtTheEndOfTheList, ImageID(#Image_ListFavourite))
Icon\ListLocked = ImageList_ReplaceIcon_(Icon\HeaderListIcon, #AtTheEndOfTheList, ImageID(#Image_ListLocked))
EndIf
; Set the new imagelist to the gadget
SendMessage_(GadgetID(Gadget.i), #LVM_SETIMAGELIST, #LVSIL_SMALL, Icon\HeaderListIcon)
ImageList_SetBkColor_(Icon\HeaderListIcon, #CLR_NONE)
SendMessage_(GadgetID(Gadget.i), #LVM_SETEXTENDEDLISTVIEWSTYLE, #LVS_EX_SUBITEMIMAGES, #LVS_EX_SUBITEMIMAGES)
EndProcedure
; // Update each column of a ListIconGadget with a user defined icon as needed //
Procedure ChangeIcon(MyGadget.i, MyRow.i, MyColumn.i, MyIcon.i)
LVG.lv_item
LVG\mask = #LVIF_IMAGE | #LVIF_TEXT
LVG\iItem = MyRow.i
LVG\iSubItem = MyColumn.i
ChangeText.s = GetGadgetItemText(MyGadget.i, MyRow.i, MyColumn.i)
LVG\pszText = @ChangeText.s
LVG\iImage = MyIcon.i
SendMessage_(GadgetID(MyGadget.i), #LVM_SETITEM, 0, @LVG)
EndProcedure
; // Main event handler for this small test program //
If Window_ChangeIconTest()
Define quitChangeIconTest = #False
AddGadgetItem(#Gadget_ChangeIconTest_Itemlist, #AtTheEndOfTheList, "Stuff" + #LF$ + "the" + #LF$ + "proverbial" + #LF$ + "duck", ImageID(#Image_ListNormal))
; Create a new image list for the ListIconGadgets and add the new icons to it. This has to be done after each
; ClearGadgetItems is used as that command trashes the image list.
BuildImageList(#Gadget_ChangeIconTest_Itemlist)
Repeat
EventID = WaitWindowEvent()
MenuID = EventMenu()
GadgetID = EventGadget()
WindowID = EventWindow()
Select EventID
Case #PB_Event_CloseWindow
Select WindowID
Case #Window_ChangeIconTest
quitChangeIconTest = #True
EndSelect
Case #PB_Event_Gadget
Select GadgetID
Case #Gadget_ChangeIconTest_Changeicon
ChangeIcon(#Gadget_ChangeIconTest_Itemlist, 0, Random(3), Icon\ListArchived )
ChangeIcon(#Gadget_ChangeIconTest_Itemlist, 0, Random(3), Icon\ListDeleted)
ChangeIcon(#Gadget_ChangeIconTest_Itemlist, 0, Random(3), Icon\ListFavourite)
ChangeIcon(#Gadget_ChangeIconTest_Itemlist, 0, Random(3), Icon\ListLocked)
Case #Gadget_ChangeIconTest_Exitdaproggi
quitChangeIconTest = #True
EndSelect
EndSelect
Until quitChangeIconTest
CloseWindow(#Window_ChangeIconTest)
EndIf
End