There is a kind of memory leak in Gnozal's procedure.
pitem\mask = #TCIF_IMAGE has to be set BEFORE the #TCM_GETITEM message is sent. Otherwise "pitem\iImage" is always 0 and every time the procedure is called an image is added to to Imagelist.
Code: Select all
Enumeration
#Window_0
EndEnumeration
Enumeration
#Panel_0
#Button_0
EndEnumeration
Enumeration
#Image_Panel_0_1
#Image_Panel_0_2
EndEnumeration
Define.i Event, EventWindow, EventGadget, EventType, EventMenu, cnt
Procedure OpenWindow_Window_0()
If OpenWindow(#Window_0, 450, 200, 301, 269, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
PanelGadget(#Panel_0, 16, 16, 262, 238)
AddGadgetItem(#Panel_0, -1, "Tab #1", CatchImage(#Image_Panel_0_1, ?Image_Panel_0_1))
ButtonGadget(#Button_0,5,5,100,30,"Button")
AddGadgetItem(#Panel_0, -1, "Tab #2", CatchImage(#Image_Panel_0_2, ?Image_Panel_0_2))
CloseGadgetList()
EndIf
EndProcedure
; ======================================================================
Procedure SetPanelGadgetTabIcon(GadgetNumber.i, TabNumber.i, ImageNumber.i)
Protected hImageList.i, pitem.TC_ITEM, hImg.i
hImg = ImageID(ImageNumber)
; get the ImageList of the PanelGadget
hImageList = SendMessage_(GadgetID(GadgetNumber), #TCM_GETIMAGELIST, 0, 0)
If hImageList = 0 ; no image list, create one
hImageList = ImageList_Create_(16, 16, #ILC_COLOR32 | #ILC_MASK, 20, 100)
SendMessage_(GadgetID(GadgetNumber), #TCM_SETIMAGELIST, 0, hImageList)
EndIf
; set image
pitem\mask = #TCIF_IMAGE ;set pitem\mask BEFORE calling the #TCM_GETITEM message
SendMessage_(GadgetID(GadgetNumber), #TCM_GETITEM, TabNumber, @pitem)
If pitem\iImage = 0 ; new image
If GetObjectType_(hImg) = #OBJ_BITMAP
pitem\iImage = ImageList_Add_(hImageList, hImg, 0)
Else
pitem\iImage = ImageList_ReplaceIcon_(hImageList, -1, hImg)
EndIf
Else ; replace image
If GetObjectType_(hImg) = #OBJ_BITMAP
pitem\iImage = ImageList_Replace_(hImageList, pitem\iImage, hImg, 0)
Else
pitem\iImage = ImageList_ReplaceIcon_(hImageList, pitem\iImage, hImg)
EndIf
EndIf
SendMessage_(GadgetID(GadgetNumber), #TCM_SETITEM, TabNumber, @pitem)
EndProcedure
Procedure ResetPanelGadgetTabIcon(GadgetNumber.i, TabNumber.i)
Protected pitem.TC_ITEM
pitem\mask = #TCIF_IMAGE
SendMessage_(GadgetID(GadgetNumber), #TCM_GETITEM, TabNumber, @pitem)
pitem\iImage = -1
SendMessage_(GadgetID(GadgetNumber), #TCM_SETITEM, TabNumber, @pitem)
EndProcedure
; ======================================================================
OpenWindow_Window_0()
cnt = 1
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_0
If cnt%2
SetPanelGadgetTabIcon(#Panel_0, 0, #Image_Panel_0_2)
SetPanelGadgetTabIcon(#Panel_0, 1, #Image_Panel_0_1)
Else
SetPanelGadgetTabIcon(#Panel_0, 0, #Image_Panel_0_1)
SetPanelGadgetTabIcon(#Panel_0, 1, #Image_Panel_0_2)
EndIf
cnt = cnt+1
EndSelect
EndSelect
Until quit = 1
End
DataSection
Image_Panel_0_1:
Data.l $00010000,$10100001,$00180000,$03680018,$00160000,$00280000,$00100000,$00200000,$00010000,$00000018,$03400000,$00000000
Data.l $00000000,$00000000,$00000000,$47470000,$48484847,$4C464646,$27274C4C,$0C0C0C27,$04050505,$08080404,$08080808,$43080808
Data.l $49494343,$48484849,$244B4B4B,$C4C42424,$D0D0D0C4,$CAC0C0C0,$A2A2CACA,$575757A2,$898D8D8D,$73738989,$7F7F7F73,$AE474747
Data.l $D1D1AEAE,$DDDDDDD1,$4CC5C5C5,$BFBF4C4C,$CDCDCDBF,$C3BBBBBB,$AAAAC3C3,$3E3E3EAA,$A9878787,$7B7BA9A9,$8C8C8C7B,$A84C4C4C
Data.l $CDCDA8A8,$DBDBDBCD,$47BFBFBF,$C0C04747,$CDCDCDC0,$C4BCBCBC,$A9A9C4C4,$3B3B3BA9,$97676767,$7D7D9797,$8989897D,$AB4B4B4B
Data.l $D0D0ABAB,$DBDBDBD0,$48C0C0C0,$C0C04848,$CDCDCDC0,$C4BCBCBC,$A6A6C4C4,$585858A6,$61424242,$7E7E6161,$8181817E,$A1494949
Data.l $C5C5A1A1,$D9D9D9C5,$48C0C0C0,$C0C04848,$CDCDCDC0,$C2BEBEBE,$BDBDC2C2,$A7A7A7BD,$A5AAAAAA,$A0A0A5A5,$A2A2A2A0,$A39E9E9E
Data.l $A7A7A3A3,$BFBFBFA7,$47C4C4C4,$C0C04747,$CDCDCDC0,$B8BABBBB,$B9B9BBB8,$BFBFBFBC,$BFBEBEBE,$BEBEBFBF,$C0BCBCC0,$BBC1BDBD
Data.l $BEBEC0BB,$BEBEBEBF,$47C4C4C4,$C1C14747,$CBCBCBC1,$EBCCCACA,$EBEBE0EB,$DEDEDEDF,$DEDEDFDF,$E9E9DEDE,$DEF2F2DE,$F1DEEFEF
Data.l $E0E0DEF1,$C3C2C2DD,$47C3C3C3,$C1C14747,$C8C5C5C1,$BDDFEBEB,$B7B7FFBD,$FFFFFFFF,$FFFFFBFB,$C3C3FFFF,$FF8A8AFF,$8FFF9292
Data.l $F8F8FF8F,$DEE1E1FF,$48BFBEBE,$C1C14848,$C8C3C3C1,$62DBF8F8,$6363FE62,$FEFFFFFD,$FEFEFFFF,$5E5EFEFE,$FE4E4EFE,$4EFEE4E4
Data.l $7171FD4E,$DFF9F9FE,$48BFBABA,$C1C14848,$C8C3C3C1,$7CDCF3F3,$3C3CFF7C,$FF8D8DFE,$FFFF7676,$7777FFFF,$FF5D5DFF,$5FFFE4E4
Data.l $8181FE5F,$DFF6F6FF,$48BFBBBB,$C1C14848,$C8C3C3C1,$75DCF5F5,$5F5FFF75,$FFE5E5FE,$59FF9B9B,$7676FF59,$FF4242FF,$43FF9595
Data.l $AAAAFE43,$DFEFEFFF,$48BFBBBB,$C1C14848,$C8C3C3C1,$66DCF8F8,$5050FF66,$FFE5E5FE,$5BFF9A9A,$6060FF5B,$FF5353FF,$52FFEEEE
Data.l $6E6EFE52,$E1FCFCFF,$48C1BCBC,$BFBF4848,$C5C3C3BF,$BFD9E4E4,$8181FDBF,$FD8A8AFC,$FFFD7979,$C3C3FDFF,$FD8080FD,$86FD8787
Data.l $F3F3FC86,$D5D8D8FD,$49B4B4B4,$C9C94949,$D4D4D4C9,$FFE7E5E5,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
Data.l $FFFFFFFF,$878686FF,$5B6A6B6B,$87875B5B,$C4C4C487,$C1BFC0C0,$BEBEC3C1,$C3BFBFC3,$C3C3BFBF,$C1C1C3C3,$C3BEBEC3,$BEC3BFBF
Data.l $C2C2C3BE,$B8B8B8C3,$49BBBBBB,$00004949,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487
Data.l $0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487,$0000C487
Data.b $87,$C4
Image_Panel_0_2:
Data.l $00010000,$20200001,$00000010,$02E80000,$00160000,$00280000,$00200000,$00400000,$00010000,$00000004,$02000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$80000080,$80000000,$00800080,$00800000,$80800080,$C0C00000,$808001C0
Data.l $00000180,$FF0000FF,$FF000100,$00FF01FF,$00FF0000,$FFFF00FF,$FFFF0100,$000001FF,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00008007,$00000000,$00000000,$07000000,$00808877,$00000000,$00000000,$77070000,$80887897,$00000000
Data.l $00000000,$97778700,$888888FF,$00000080,$00000000,$FF278700,$88780700,$00000088,$00000000,$00FF8700,$780730B3,$00000088
Data.l $00000000,$BB008F00,$073033B3,$00000078,$00000000,$BBBB8000,$303333F7,$00000007,$00000000,$FFBB0300,$333373BB,$00000030
Data.l $00000000,$B3FF8378,$3033B77B,$00000000,$77000000,$37B78878,$0373BB37,$00000033,$78770000,$733B8878,$03B77B73,$000000BB
Data.l $80787700,$B7838878,$0B0BB837,$000030BB,$00807877,$00808878,$8B3000BB,$778000B3,$00008078,$BB838878,$BBBB030B,$88870030
Data.l $00000080,$BB838878,$33BB8B80,$70879000,$00AA0000,$33808878,$0033BBBB,$70870000,$0000AA00,$80808878,$00003333,$70879000
Data.l $00AA00F0,$88808878,$00000000,$70870000,$0000AA00,$88808878,$00000080,$70870009,$00AA00F0,$88808878,$00000080,$70870000
Data.l $0000AA00,$88808878,$09000080,$70870000,$880000F0,$88808878,$00090980,$70870000,$77880000,$88808878,$00000080,$70870000
Data.l $FF778800,$88807877,$00000080,$70870000,$77FF7788,$78707777,$00000080,$88870000,$7777FF77,$77877877,$00000070,$77880000
Data.l $777777FF,$78778778,$00000080,$88000000,$78777777,$80787787,$00000000,$00000000,$88787788,$00808888,$00000000,$00000000
Data.l $00808800,$00000000,$00000000,$FFFF0000,$FFFFFFF9,$FFFF7FE0,$FEFF1F80,$FCFF0700,$FCFF0100,$FCFF0100,$FCFF0100,$FCFF0100
Data.l $F0FF0100,$C0FF0300,$00FF0300,$00FC0100,$00F00100,$00C00100,$00000300,$00000700,$00000D00,$00003F00,$0000FD00,$0000FF07
Data.l $0000FB03,$0000FF03,$0000EF03,$0000BF02,$0000FF03,$0000FF03,$0000FF03,$0000FF03,$00C0FF07,$00F0FF1F,$7FFCFF7F
Data.b $FF,$FF
EndDataSection