Change the TreeGadgetIcon

Just starting out? Need help? Post your questions and find answers here.
Kai
New User
New User
Posts: 4
Joined: Mon Mar 05, 2007 7:34 pm

Change the TreeGadgetIcon

Post by Kai »

I've made a treegadget with entries which also have icons.
Now I'll want to change onthefly the icon of one entry.
Is there any simply possibility?
I've following idea: ChangeTreeGadgetIcon(Gadget, Index, hIcon)

sorry for bad english but i'm german :D
User avatar
Fluid Byte
Addict
Addict
Posts: 2336
Joined: Fri Jul 21, 2006 4:41 am
Location: Berlin, Germany

Post by Fluid Byte »

The only way without API would be by deleting all items and adding them with a new image id everytime you want to change an icon. But this is inefficient so you should use API:

Code: Select all

LoadImage(0,#PB_Compiler_Home + "Examples\Sources - Advanced\MoviePlayer\Icons\pause.ico")
LoadImage(1,#PB_Compiler_Home + "Examples\Sources - Advanced\MoviePlayer\Icons\play.ico")
LoadImage(2,#PB_Compiler_Home + "Examples\Sources - Advanced\MoviePlayer\Icons\stop.ico")

OpenWindow(0,0,0,210,240,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ButtonGadget(0,5,5,200,25,"Change Random Item Icon")
TreeGadget(1,5,35,200,200)

For i=0 To 11
	AddGadgetItem(1,-1,"TreeGadget Item #" + Str(i+1),ImageID(Random(2)),Random(2))
	SetGadgetState(1,i)
Next

Repeat
	EventID = WaitWindowEvent()

	If EventID = #PB_Event_Gadget And EventGadget() = 0		
		lvi.TV_ITEM
		lvi\mask = #TVIF_IMAGE | #TVIF_HANDLE
		lvi\hItem = GadgetItemID(1,Random(CountGadgetItems(1)-1))
		lvi\iImage = 1+Random(2)
		SendMessage_(GadgetID(1),#TVM_SETITEM,0,lvi)			
	EndIf
Until EventID = #PB_Event_CloseWindow
Windows 10 Pro, 64-Bit / Whose Hoff is it anyway?
Kai
New User
New User
Posts: 4
Joined: Mon Mar 05, 2007 7:34 pm

Post by Kai »

My Code :D

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
Last edited by Kai on Wed May 09, 2007 8:42 pm, edited 1 time in total.
User avatar
Fluid Byte
Addict
Addict
Posts: 2336
Joined: Fri Jul 21, 2006 4:41 am
Location: Berlin, Germany

Post by Fluid Byte »

LOL, I assume your problem is solved then. Image
Windows 10 Pro, 64-Bit / Whose Hoff is it anyway?
Post Reply