I tried the follwing code but the problem is that it still keeps the first icon (left) or a space instead
Code: Select all
;Autor: Kurzer
;http://www.purebasic.fr/german/viewtopic.php?p=250562#p250562
EnableExplicit
Procedure SetGadgetItemIcon(iGadgetNr.i, iRow.i, iCol.i, iIcon.i, iSet.i)
Protected lvi.lv_item
lvi\mask = #LVIF_IMAGE
lvi\iItem = iRow ; row number for change
lvi\iSubItem = iCol ; 2nd subitem
lvi\pszText = #Null ; text to change to
If iSet
lvi\iImage = iIcon ; Icon setzen
Else
lvi\iImage = -1 ; Icon löschen
EndIf
SendMessage_(GadgetID(iGadgetNr), #LVM_SETITEM, 0, @lvi)
EndProcedure
Define iGadgetNr.i, hListIconGadget.i, hImlImages.i, iStyle.i, Event.i
Define sText.s
If OpenWindow(0, 100, 100, 350, 100, "Icons in allen ListIcon-Spalten, nicht nur in der ersten.", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; ListIconGadget anlegen
iGadgetNr = ListIconGadget(#PB_Any, 5, 5, 340, 90, "Dummy", 50, #PB_ListIcon_FullRowSelect) ;#PB_ListIcon_AlwaysShowSelection|#LVS_NOCOLUMNHEADER)
; 4 weitere Spalten zufügen
AddGadgetColumn(iGadgetNr, 1, "1", 16)
AddGadgetColumn(iGadgetNr, 2, "2", 100)
AddGadgetColumn(iGadgetNr, 3, "3", 80)
AddGadgetColumn(iGadgetNr, 4, "4", 80)
; Und drei Beispiel-Zeilen erzeugen
AddGadgetItem(iGadgetNr, -1, #LF$ + "" + #LF$ + " Ernst" + #LF$ + " hungrig")
AddGadgetItem(iGadgetNr, -1, #LF$ + "" + #LF$ + " Karl" + #LF$ + " faul")
AddGadgetItem(iGadgetNr, -1, #LF$ + "" + #LF$ + " Gabi" + #LF$ + " schön")
hListIconGadget = GadgetID(iGadgetNr)
; Eine Imagelist aufbauen
CatchImage(0, ?Test)
hImlImages = ImageList_Create_(16, 16, #ILC_COLOR32 | #ILC_MASK, 0, 8) ; | #ILC_MASK
ImageList_AddMasked_(hImlImages, ImageID(0), #CLR_NONE)
; Das "PB-eigenen" Image ist jetzt nicht mehr nötig, weil es in die ImageList kopiert wurde
FreeImage(0)
; Die Imagelist dem ListIconGadget zuordnen
SendMessage_(hListIconGadget, #LVM_SETIMAGELIST, #LVSIL_SMALL, hImlImages)
; Jetzt dem ListIconGadget sagen, daß es auch in SubItems Icons anzeigel soll/darf
iStyle = SendMessage_(hListIconGadget, #LVM_GETEXTENDEDLISTVIEWSTYLE , 0, 0) | #LVS_EX_SUBITEMIMAGES
SendMessage_(hListIconGadget, #LVM_SETEXTENDEDLISTVIEWSTYLE , 0, iStyle)
; SendMessage_(hListIconGadget, #LVM_SETTEXTBKCOLOR , 0, #White)
; SendMessage_(hListIconGadget, #LVM_SETBKCOLOR, 0, #White)
;Die blöden, per default gesetzen Icons in Spalte 0 entfernen
SetGadgetItemIcon(iGadgetNr, 0, 0, 0, #False)
SetGadgetItemIcon(iGadgetNr, 1, 0, 0, #False)
SetGadgetItemIcon(iGadgetNr, 2, 0, 0, #False)
;Jetzt die Icons nachträglich in die Spalten setzen
SetGadgetItemIcon(iGadgetNr, 0, 1, 2, #True)
SetGadgetItemIcon(iGadgetNr, 1, 1, 2, #True)
SetGadgetItemIcon(iGadgetNr, 2, 1, 2, #True)
SetGadgetItemIcon(iGadgetNr, 0, 2, 1, #True)
SetGadgetItemIcon(iGadgetNr, 1, 2, 1, #True)
SetGadgetItemIcon(iGadgetNr, 2, 2, 0, #True)
SetGadgetItemIcon(iGadgetNr, 0, 4, 2, #True)
SetGadgetItemIcon(iGadgetNr, 1, 4, 2, #True)
SetGadgetItemIcon(iGadgetNr, 2, 4, 2, #True)
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
; Am Ende die Imagelist wieder freigeben
ImageList_Destroy_(hImlImages)
EndIf
DataSection
; Dies ist ein 16 Farben BMP Image mit 48 x 16 Pixeln Ausmaße (also quasi drei 16 x 16 Pixel große Images nebeneinander)
Test:
; IncludeBinary "test.bmp"
Data.l $01F64D42,$00000000,$00760000,$00280000,$00300000,$00100000,$00010000,$00000004,$01800000,$00000000
Data.l $00000000,$00000000,$00000000,$02040000,$FEFC00FC,$02FC00FC,$00000004,$FC820000,$3A00002D,$3C0000FF
Data.l $00000091,$5500007C,$01000001,$02000000,$00000000,$E9910000,$43B10061,$003700AC,$007E0080,$1111007C
Data.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111
Data.l $11111111,$11111111,$11111111,$10111111,$10111101,$11111101,$11111111,$11111111,$11222211,$11111111
Data.l $00111100,$11111111,$11111111,$11111111,$21222212,$11111111,$01000010,$11111111,$11111111,$11111111
Data.l $22111122,$11111111,$11000011,$11111111,$11881811,$12111111,$12111121,$11111121,$11111111,$11111111
Data.l $81888811,$11111111,$11211211,$11111111,$11011011,$11111111,$88888818,$11111111,$11211211,$11111111
Data.l $11011011,$11111111,$88888818,$11111111,$11211211,$11111111,$11011011,$11111111,$88888818,$12111111
Data.l $12111121,$10111121,$10111101,$11111101,$81888811,$22111111,$22111122,$00111122,$00111100,$11111100
Data.l $11881811,$22111111,$22111122,$00111122,$00111100,$11111100,$11111111,$12111111,$12111121,$10111121
Data.l $10111101,$11111101,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111
Data.l $11111111,$11111111,$11111111,$11111111,$11111111
Data.b $11,$11
EndDataSection