Page 1 of 2
Change TreeGadget Icon
Posted: Sat May 01, 2004 1:21 am
by eddy
Code updated For 5.20+
Code: Select all
; //////////////////////////////////////////////
; TreeGadget Add Icon
; //////////////////////////////////////////////
Procedure.l AddTreeIcon(TreeID.l,Image.l)
hItem=AddGadgetItem(TreeID,-1,"",Image)
tvitem.TV_ITEM
tvitem\hitem=hItem
tvitem\mask=#TVIF_IMAGE
SendMessage_(GadgetID(TreeID), #TVM_GETITEM,0,@tvitem)
res=tvitem\iImage
ProcedureReturn res
EndProcedure
; //////////////////////////////////////////////
; TreeGadget Change Icon
; //////////////////////////////////////////////
Procedure.l SetTreeIcon(TreeID.l,Index,IcoIndex.l)
hItem=GadgetItemID(TreeID,Index)
txt.S=Space(1000)
tvitem.TV_ITEM
tvitem\hitem=hItem
tvitem\psztext=@txt
tvitem\cchTextMax = 1000
tvitem\mask=#TVIF_TEXT|#TVIF_IMAGE|#TVIF_HANDLE|#TVIF_SELECTEDIMAGE
SendMessage_(GadgetID(TreeID), #TVM_GETITEM,0,@tvitem)
tvitem\iImage=IcoIndex
tvitem\iSelectedImage=IcoIndex
SendMessage_(GadgetID(TreeID), #TVM_SETITEM,0,@tvitem)
EndProcedure
; //////////////////////////////////////////////
; Code Example
; //////////////////////////////////////////////
Enumeration
#WIN
#TREE
#BUTTON
EndEnumeration
If OpenWindow(#WIN, 0, 0, 222, 222, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
;images
img0=LoadImage(0, "Data\Drive.bmp")
img1=LoadImage(1, "Data\CdPlayer.ico")
;tree gadget
TreeGadget(#TREE, 0,0,111,222,#PB_Tree_AlwaysShowSelection)
;init tree gadget icon
img0Index=AddTreeIcon(#TREE,img0)
img1Index=AddTreeIcon(#TREE,img1)
;build tree
AddGadgetItem(#TREE,-1,"1-Entry",img0)
AddGadgetItem(#TREE,-1,"2-Entry",img1)
AddGadgetItem(#TREE,-1,"3-Entry",img1)
ButtonGadget(#BUTTON,120,5,80,20,"Change Icons")
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndIf
If eventID = #PB_Event_Gadget
If EventGadget()=#BUTTON
If mode
mode=0
SetTreeIcon(#TREE,0,img0Index)
SetTreeIcon(#TREE,1,img1Index)
SetTreeIcon(#TREE,2,img1Index)
Else
mode=1
SetTreeIcon(#TREE,0,img1Index)
SetTreeIcon(#TREE,1,img0Index)
SetTreeIcon(#TREE,2,img1Index)
EndIf
EndIf
EndIf
Until Quit = 1
EndIf
End ; All the opened windows are closed automatically by PureBasic
oops !
Posted: Sat May 01, 2004 1:30 pm
by DominiqueB
Thank's for the code,
just a litle things: line 28 contain 2 ||
that makes the compiler complains

Posted: Sat May 01, 2004 4:28 pm
by eddy
Ok I've fixed it.
Posted: Thu Jun 17, 2004 5:53 am
by Shannara
How do we remove an icon from a treenode?
Posted: Thu Jun 17, 2004 12:26 pm
by eddy
You can remove an icon, there's blank area left.
Posted: Thu Jun 17, 2004 5:22 pm
by Shannara
Oh ok, so not a real removal then. Because once an icon is really removed, there is no blank area

Posted: Thu Jun 17, 2004 5:32 pm
by freak
If there is one icon, all other items get the blank area. That is a Windows thing, no way around that.
Timo
Posted: Sun Aug 22, 2004 4:29 am
by Shannara
No no, I mean, say you change an icon, etc, then try to remove that icon, from that tree node, once you do that, there is a blank space instead of no icon. So instead of really removing the icon, it replaces the icon with a blank icon.
Posted: Sun Aug 22, 2004 10:48 am
by Psychophanta
Thanks Eddy. Useful for me.
How to do same with Items text color and/or fonts?
Posted: Sun Aug 20, 2006 11:31 pm
by Calloway
Hi!
I want to use this code in PB4. Can You just look over it and make a PB4 compatible version?
Posted: Sun Aug 20, 2006 11:38 pm
by srod
Code: Select all
; //////////////////////////////////////////////
; TreeGadget Add Icon
; //////////////////////////////////////////////
Procedure.l AddTreeIcon(TreeID.l,Image.l)
hItem=AddGadgetItem(TreeID,-1,"",Image)
tvitem.TV_ITEM
tvitem\hitem=hItem
tvitem\mask=#TVIF_IMAGE
SendMessage_(GadgetID(TreeID), #TVM_GETITEM,0,@tvitem)
ClearGadgetItemList(TreeID)
res=tvitem\iImage
ProcedureReturn res
EndProcedure
; //////////////////////////////////////////////
; TreeGadget Change Icon
; //////////////////////////////////////////////
Procedure.l SetTreeIcon(TreeID.l,Index,IcoIndex.l)
hItem=GadgetItemID(TreeID,Index)
txt.S=Space(1000)
tvitem.TV_ITEM
tvitem\hitem=hItem
tvitem\psztext=@txt
tvitem\cchTextMax = 1000
tvitem\mask=#TVIF_TEXT|#TVIF_IMAGE|#TVIF_HANDLE|#TVIF_SELECTEDIMAGE
SendMessage_(GadgetID(TreeID), #TVM_GETITEM,0,@tvitem)
tvitem\iImage=IcoIndex
tvitem\iSelectedImage=IcoIndex
SendMessage_(GadgetID(TreeID), #TVM_SETITEM,0,@tvitem)
EndProcedure
; //////////////////////////////////////////////
; Code Example
; //////////////////////////////////////////////
Enumeration
#WIN
#TREE
#BUTTON
EndEnumeration
If OpenWindow(#WIN, 0, 0, 222, 222, "PureBasic Window",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
If CreateGadgetList(WindowID(#win))
;images. LOAD YOUR OWN HERE!
img0=LoadImage(0, "new.ico")
img1=LoadImage(1, "open.ico")
;tree gadget
TreeGadget(#TREE, 0,0,111,222,#PB_Tree_AlwaysShowSelection)
;init tree gadget icon
img0Index=AddTreeIcon(#TREE,img0)
img1Index=AddTreeIcon(#TREE,img1)
;build tree
AddGadgetItem(#TREE,-1,"1-Entry",img0)
AddGadgetItem(#TREE,-1,"2-Entry",img1)
AddGadgetItem(#TREE,-1,"3-Entry",img1)
ButtonGadget(#BUTTON,120,5,80,20,"Change Icons")
EndIf
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndIf
If eventID = #PB_Event_Gadget
If EventGadget()=#BUTTON
If mode
mode=0
SetTreeIcon(#TREE,0,img0Index)
SetTreeIcon(#TREE,1,img1Index)
SetTreeIcon(#TREE,2,img1Index)
Else
mode=1
SetTreeIcon(#TREE,0,img1Index)
SetTreeIcon(#TREE,1,img0Index)
SetTreeIcon(#TREE,2,img1Index)
EndIf
EndIf
EndIf
Until Quit = 1
EndIf
End ; All the opened windows are closed automatically by PureBasic
Posted: Sun Aug 20, 2006 11:43 pm
by techjunkie
Calloway wrote:Hi!
I want to use this code in PB4. Can You just look over it and make a PB4 compatible version?
I just dropped it in "PBSourceConverter", hope it is ok.
PBSourceConverter V 1.0.8 wrote:EventGadgetID in Line 75 was renamed to EventGadget!
In Line 47 was in WindowID an parameter on position 1 added!
In Line 45 was OpenWindow Parameter 6 with Parameter 7 swapped!
Code: Select all
; Converted by PBSourceConverter on 21.08.2006 / 00:48
; //////////////////////////////////////////////
; TreeGadget Add Icon
; //////////////////////////////////////////////
Procedure.l AddTreeIcon(TreeID.l,Image.l)
hItem=AddGadgetItem(TreeID,-1,"",Image)
tvitem.TV_ITEM
tvitem\hitem=hItem
tvitem\mask=#TVIF_IMAGE
SendMessage_(GadgetID(TreeID), #TVM_GETITEM,0,@tvitem)
ClearGadgetItemList(TreeID)
res=tvitem\iImage
ProcedureReturn res
EndProcedure
; //////////////////////////////////////////////
; TreeGadget Change Icon
; //////////////////////////////////////////////
Procedure.l SetTreeIcon(TreeID.l,Index,IcoIndex.l)
hItem=GadgetItemID(TreeID,Index)
txt.S=Space(1000)
tvitem.TV_ITEM
tvitem\hitem=hItem
tvitem\psztext=@txt
tvitem\cchTextMax = 1000
tvitem\mask=#TVIF_TEXT|#TVIF_IMAGE|#TVIF_HANDLE|#TVIF_SELECTEDIMAGE
SendMessage_(GadgetID(TreeID), #TVM_GETITEM,0,@tvitem)
tvitem\iImage=IcoIndex
tvitem\iSelectedImage=IcoIndex
SendMessage_(GadgetID(TreeID), #TVM_SETITEM,0,@tvitem)
EndProcedure
; //////////////////////////////////////////////
; Code Example
; //////////////////////////////////////////////
Enumeration
#WIN
#TREE
#BUTTON
EndEnumeration
If OpenWindow(#WIN, 0, 0, 222, 222, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
If CreateGadgetList(WindowID(#WIN))
;images
img0=LoadImage(0, "Data\Drive.bmp")
img1=LoadImage(1, "Data\CdPlayer.ico")
;tree gadget
TreeGadget(#TREE, 0,0,111,222,#PB_Tree_AlwaysShowSelection)
;init tree gadget icon
img0Index=AddTreeIcon(#TREE,img0)
img1Index=AddTreeIcon(#TREE,img1)
;build tree
AddGadgetItem(#TREE,-1,"1-Entry",img0)
AddGadgetItem(#TREE,-1,"2-Entry",img1)
AddGadgetItem(#TREE,-1,"3-Entry",img1)
ButtonGadget(#BUTTON,120,5,80,20,"Change Icons")
EndIf
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndIf
If eventID = #PB_Event_Gadget
If EventGadget()=#BUTTON
If mode
mode=0
SetTreeIcon(#TREE,0,img0Index)
SetTreeIcon(#TREE,1,img1Index)
SetTreeIcon(#TREE,2,img1Index)
Else
mode=1
SetTreeIcon(#TREE,0,img1Index)
SetTreeIcon(#TREE,1,img0Index)
SetTreeIcon(#TREE,2,img1Index)
EndIf
EndIf
EndIf
Until Quit = 1
EndIf
End ; All the opened windows are closed automatically by PureBasic
Posted: Mon Aug 21, 2006 9:22 am
by Calloway
Thank You For Your Help.
The code runs now in PB4 without errors. But the result is not the same as in PB3.94. In PB3.94 the icons are changing every time I press the Change button. In PB4 the icons are only changing once and every time I press the change button the tree keeps its last icon and doesn't change anymore.
Posted: Mon Aug 21, 2006 11:40 am
by srod
This took a bit of figuring out!
The problem is that it is easy to switch icons between items of a tree gadget, but not quite so easy to add extra items to the Tree gadget's image list and then switch between them.
The problem with the above code seems to be that the ClearGadgetItemList() function now seems to destroy the image list. I've adjusted the code accordingly.
Code: Select all
; //////////////////////////////////////////////
; TreeGadget Add Icon
; Purebasic 4 version (adapted by srod).
; //////////////////////////////////////////////
Procedure.l AddTreeIcon(TreeID.l,Image.l)
hItem=AddGadgetItem(TreeID,-1,"",Image)
tvitem.TV_ITEM
tvitem\hitem=hItem
tvitem\mask=#TVIF_IMAGE
SendMessage_(GadgetID(TreeID), #TVM_GETITEM,0,@tvitem)
RemoveGadgetItem(TreeID,0) ;MADE THE CHANGE HERE!
res=tvitem\iImage
ProcedureReturn res
EndProcedure
; //////////////////////////////////////////////
; TreeGadget Change Icon
; //////////////////////////////////////////////
Procedure.l SetTreeIcon(TreeID.l,Index,IcoIndex.l)
hItem=GadgetItemID(TreeID,Index)
txt.S=Space(1000)
tvitem.TV_ITEM
tvitem\hitem=hItem
tvitem\psztext=@txt
tvitem\cchTextMax = 1000
tvitem\mask=#TVIF_TEXT|#TVIF_IMAGE|#TVIF_HANDLE|#TVIF_SELECTEDIMAGE
SendMessage_(GadgetID(TreeID), #TVM_GETITEM,0,@tvitem)
tvitem\iImage=IcoIndex
tvitem\iSelectedImage=IcoIndex
SendMessage_(GadgetID(TreeID), #TVM_SETITEM,0,@tvitem)
EndProcedure
; //////////////////////////////////////////////
; Code Example
; //////////////////////////////////////////////
Enumeration
#WIN
#TREE
#BUTTON
EndEnumeration
If OpenWindow(#WIN, 0, 0, 222, 222, "PureBasic Window",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
If CreateGadgetList(WindowID(#win))
;images. LOAD YOUR OWN HERE!
img0=LoadImage(0, "new.ico")
img1=LoadImage(1, "open.ico")
img2=LoadImage(2, "save.ico")
img3=LoadImage(3, "error.ico")
;tree gadget
TreeGadget(#TREE, 0,0,111,222,#PB_Tree_AlwaysShowSelection)
;init tree gadget icon. ADD YOUR OWN ICONS HERE!
img0Index=AddTreeIcon(#TREE,img0)
img1Index=AddTreeIcon(#TREE,img1)
img2Index=AddTreeIcon(#TREE,img2)
img3Index=AddTreeIcon(#TREE,img3)
;build tree
AddGadgetItem(#TREE,-1,"1-Entry",img0,0)
AddGadgetItem(#TREE,-1,"2-Entry",img1,0)
AddGadgetItem(#TREE,-1,"3-Entry",img2,0)
ButtonGadget(#BUTTON,120,5,80,20,"Change Icons")
EndIf
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndIf
If eventID = #PB_Event_Gadget
If EventGadget()=#BUTTON
If mode
mode=0
SetTreeIcon(#TREE,0,img0Index)
SetTreeIcon(#TREE,1,img1Index)
SetTreeIcon(#TREE,2,img2Index)
Else
mode=1
SetTreeIcon(#TREE,0,img3Index)
SetTreeIcon(#TREE,1,img3Index)
SetTreeIcon(#TREE,2,img3Index)
EndIf
EndIf
EndIf
Until Quit = 1
EndIf
End ; All the opened windows are closed automatically by PureBasic
Posted: Mon Aug 21, 2006 11:46 am
by Calloway
Wow, thank You! That works! You made my day!