Hoffe haben sich keine Fehler eingeschlichen.
Ändert das Icon eines Eintrags im TreeGadget, anhand eines geladenen Icons.
Code: Alles auswählen
Schau Unten!
Code: Alles auswählen
Schau Unten!
Code: Alles auswählen
[+] Item 1
- Sub Item 1_1
- Sub Item 1_2
[+] Item 2
- Sub Item 2_1
- Sub Item 2_2
Code: Alles auswählen
EnableExplicit
Procedure.s SystemPath()
Protected Path.s = Space(#MAX_PATH)
GetSystemDirectory_(@Path, #MAX_PATH)
PathAddBackslash_(@Path)
ProcedureReturn Path
EndProcedure
Procedure.l TreeGadget_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 And 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: ProcedureReturn 0: EndIf
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) = 0: ProcedureReturn 0: EndIf
If II\iImage = IcnIndex And x <> Index: AddBool = 1: Break: EndIf
Next
If AddBool = 1
nIcnIndex = ImageList_AddIcon_(hImgList, hIcn)
If nIcnIndex = -1: ProcedureReturn 0: EndIf
II\hitem = GadgetItemID(Gadget, Index)
II\mask = #TVIF_IMAGE
II\iImage = nIcnIndex
If SendMessage_(GadgetID(Gadget), #TVM_SETITEM, #Null, @II) = 0: ProcedureReturn 0: EndIf
II\hitem = GadgetItemID(Gadget, Index)
II\mask = #TVIF_SELECTEDIMAGE
II\iSelectedImage = nIcnIndex
If SendMessage_(GadgetID(Gadget), #TVM_SETITEM, #Null, @II) = 0: ProcedureReturn 0: EndIf
If SendMessage_(GadgetID(Gadget), #TVM_SETIMAGELIST, #LVSIL_NORMAL, hImgList) <> 0: ProcedureReturn 1: EndIf
Else
If ImageList_ReplaceIcon_(hImgList, IcnIndex, hIcn) = -1: ProcedureReturn 0: EndIf
If SendMessage_(GadgetID(Gadget), #TVM_SETIMAGELIST, #LVSIL_NORMAL, hImgList) <> 0: ProcedureReturn 1: 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
Code: Alles auswählen
Procedure CreateImageDrawBox(image,color)
CreateImage(image,16,16)
StartDrawing(ImageOutput(image))
Box(0,0,16,16,$FFFFFF)
Box(1,1,14,14,$0)
Box(2,2,12,12,color)
StopDrawing()
EndProcedure
Procedure InsertTreeImageList(hWnd,image)
HiMg = SendMessage_(hWnd,#TVM_GETIMAGELIST,#TVSIL_NORMAL,0)
If Not HiMg
HiMg = ImageList_Create_(16,16,#ILC_COLOR32,1,5)
EndIf
SendMessage_(hWnd,#TVM_SETIMAGELIST,#TVSIL_NORMAL,HiMg)
ImageList_Add_(HiMg,image,0)
EndProcedure
Procedure _subclass_cb_(hWnd,uMsg,wParam,lParam)
If uMsg = #WM_NOTIFY
*notify.NMTREEVIEW = lParam
If *notify\hdr\code = #TVN_SELCHANGED
*notify\itemOld\mask = #TVIF_SELECTEDIMAGE
*notify\itemOld\iSelectedImage = 0
SendMessage_(*notify\hdr\hwndFrom,#TVM_SETITEM,0,*notify\itemOld)
*notify\itemNew\mask = #TVIF_SELECTEDIMAGE
*notify\itemNew\iSelectedImage = 1
SendMessage_(*notify\hdr\hwndFrom,#TVM_SETITEM,0,*notify\itemNew)
EndIf
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
hWnd = OpenWindow(0,#PB_Ignore,#PB_Ignore,180,180,"leer")
CreateGadgetList(hWnd)
TreeGadget(0, 10, 10, 160, 160)
CreateImageDrawBox(0,$0080FF)
CreateImageDrawBox(1,$804000)
InsertTreeImageList(GadgetID(0),ImageID(0))
InsertTreeImageList(GadgetID(0),ImageID(1))
For a = 0 To 3
AddGadgetItem(0, -1, "Normal Item "+Str(a),0,0)
AddGadgetItem(0, -1, "Node "+Str(a),0,0)
AddGadgetItem(0, -1, "Sub-Item 1 " ,0,1)
Next
SetWindowCallback(@_subclass_cb_(),0)
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow