Code: Select all
Procedure MouseOverTreeGadgetItem(WindowID,TreeGadgetID)
;If the cursor hovers over a treegadget item, it will return the
;item number, else it returns -1. Use in conjunstion with the
;#WM_MOUSEMOVE window event
;
;Based on code from Sparkie / Srod
MyPoint.point\x = WindowMouseX(WindowID)
MyPoint\y = WindowMouseY(WindowID)
MapWindowPoints_(WindowID(WindowID),GadgetID(TreeGadgetID),@MyPoint,1)
HitTest.TV_HITTESTINFO
HitTest\pt\x = MyPoint\x
HitTest\pt\y = MyPoint\y
SendMessage_(GadgetID(TreeGadgetID), #TVM_HITTEST, 0, HitTest)
For Check = 0 To CountGadgetItems(TreeGadgetID)-1
If HitTest\hItem = GadgetItemID(TreeGadgetID,Check)
ProcedureReturn Check
EndIf
Next
ProcedureReturn -1
EndProcedure
;Example
If OpenWindow(0, 0, 0, 350, 200, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
TreeGadget(0, 10, 10, 180, 180)
For i = 0 To 5
AddGadgetItem (0, -1, "Item "+ Str(i))
AddGadgetItem (0, -1, "Parent " + Str(i))
AddGadgetItem(0, -1, "Sub Item 1")
AddGadgetItem(0, -1, "Sub Item 2")
AddGadgetItem(0, -1, "Sub Item 3")
AddGadgetItem(0, -1, "Sub Item 4")
Next
Repeat
event = WaitWindowEvent()
If Event = #WM_MOUSEMOVE And EventGadget() = 0
Debug MouseOverTreeGadgetItem(0,0)
EndIf
Until event = #PB_Event_CloseWindow
EndIf