Code: Select all
EnableExplicit
Procedure.s SystemPath()
Protected Path.s = Space(#MAX_PATH)
GetSystemDirectory_(@Path, #MAX_PATH)
PathAddBackslash_(@Path)
ProcedureReturn Path
EndProcedure
Procedure.l TreeView_ChangeIcon(Gadget, Index, hIcn)
Protected hImgList.l, IcnIndex.l, II.TV_ITEM, x.l, nIcnIndex.l, AddBool.l
If IsGadget(Gadget) <> 0 And GadgetType(Gadget) = #PB_GadgetType_Tree
If Index >= 0 And Index < CountGadgetItems(Gadget)
hImgList = SendMessage_(GadgetID(Gadget), #TVM_GETIMAGELIST, #LVSIL_NORMAL, #Null)
If hImgList <> 0
II\hitem = GadgetItemID(Gadget, Index)
II\mask = #TVIF_IMAGE
If SendMessage_(GadgetID(Gadget), #TVM_GETITEM, #Null, @II) <> 0
IcnIndex = II\iImage
If IcnIndex = 0: ProcedureReturn 0: EndIf
For x = 0 To CountGadgetItems(Gadget) - 1
II\hitem = GadgetItemID(Gadget, x)
II\mask = #TVIF_IMAGE
If SendMessage_(GadgetID(Gadget), #TVM_GETITEM, #Null, @II) = IcnIndex
If x <> Index
AddBool = 1
Break
EndIf
EndIf
Next
If AddBool = 1
nIcnIndex = ImageList_AddIcon_(hImgList, hIcn)
If nIcnIndex <> -1
II\hitem = GadgetItemID(Gadget, Index)
II\mask = #TVIF_IMAGE
II\iImage = nIcnIndex
If SendMessage_(GadgetID(Gadget), #TVM_SETITEM, #Null, @II) <> 0
II\hitem = GadgetItemID(Gadget, Index)
II\mask = #TVIF_SELECTEDIMAGE
II\iSelectedImage = nIcnIndex
If SendMessage_(GadgetID(Gadget), #TVM_SETITEM, #Null, @II) <> 0
If SendMessage_(GadgetID(Gadget), #TVM_SETIMAGELIST, #LVSIL_NORMAL, hImgList) <> 0
ProcedureReturn 1
EndIf
EndIf
EndIf
EndIf
Else
If ImageList_ReplaceIcon_(hImgList, IcnIndex, hIcn) <> -1
If SendMessage_(GadgetID(Gadget), #TVM_SETIMAGELIST, #LVSIL_NORMAL, hImgList) <> 0
ProcedureReturn 1
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 250, 150, "TreeGadget ChangeIcon", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) <> 0
If CreateGadgetList(WindowID(0))
TreeGadget(0, 5, 5, WindowWidth(0) - 10, WindowHeight(0) - 37)
ButtonGadget(1, 5, GadgetHeight(0) + 10, WindowWidth(0) - 10, 22, "Change Icons")
EndIf
Define hIcn.l
ExtractIconEx_(SystemPath() + "SHELL32.dll", 3, #Null, @hIcn, 1)
AddGadgetItem(0, -1, "Tree", hIcn, 0)
AddGadgetItem(0, -1, "Eintrag", hIcn, 1)
AddGadgetItem(0, -1, "Eintrag", hIcn, 1)
SetGadgetState(0, 1)
DestroyIcon_(hIcn)
EndIf
Procedure ChangeIcons()
Static Bool.l: Protected hIcn1.l, hIcn2.l, IcnI1.l, IcnI2.l: Bool!1
Select Bool
Case 0: IcnI1 = 3: IcnI2 = 4
Case 1: IcnI1 = 4: IcnI2 = 3
EndSelect
ExtractIconEx_(SystemPath() + "SHELL32.dll", IcnI1, #Null, @hIcn1, 1)
ExtractIconEx_(SystemPath() + "SHELL32.dll", IcnI2, #Null, @hIcn2, 1)
If hIcn1 <> 0 And hIcn2 <> 0
TreeView_ChangeIcon(0, 0, hIcn1)
TreeView_ChangeIcon(0, 1, hIcn2)
TreeView_ChangeIcon(0, 2, hIcn2)
DestroyIcon_(hIcn1): DestroyIcon_(hIcn2)
EndIf
EndProcedure
Repeat
Select WindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 1: ChangeIcons()
EndSelect
Case #PB_Event_CloseWindow: End
Case #False: Delay(1)
EndSelect
ForEver