Here a first solution (from French forum discussion "
here"):
I retrieve values 4096 and 8192 which are characteristics of the checkbox state change.
A more elegant code could exist because:
- I recomputed the cursor coordinates on TreeGadget
- I retrieve only the item handle
Code: Select all
#TVM_GETITEMSTATE = #TV_FIRST + 39
Procedure.l WindowCallback(hWnd, Msg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
If Msg = #WM_NOTIFY
*lp.NMTREEVIEW = lParam
Select *lp\hdr\code
; Case #TVN_BEGINDRAG
; Debug "#TVN_BEGINDRAG"
; Case #TVN_BEGINLABELEDIT
; Debug "#TVN_BEGINLABELEDIT"
; Case #TVN_DELETEITEM
; Debug "#TVN_DELETEITEM"
; Case #TVN_ENDLABELEDIT
; Debug "#TVN_ENDLABELEDIT"
; Case #TVN_GETDISPINFO
; Debug "#TVN_GETDISPINFO"
; ; Case #TVN_ITEMEXPANDE
; ; Debug "#TVN_ITEMEXPANDE"
; Case #TVN_ITEMEXPANDING
; Debug "#TVN_ITEMEXPANDING"
; Case #TVN_KEYDOWN
; Debug "#TVN_KEYDOWN"
; Case #TVN_SELCHANGED
; Debug "#TVN_SELCHANGED"
; Case #TVN_SELCHANGING
; Debug "#TVN_SELCHANGING"
; Case #TVN_SETDISPINFO
; Debug "#TVN_SETDISPINFO"
Case #NM_CLICK
pt.Point\x=DesktopMouseX()
pt\y=DesktopMouseY()
GetWindowRect_(GadgetID(0),rect.RECT)
lp2.TV_HITTESTINFO\pt\x=pt\x-rect\left
lp2\pt\y=pt\y-rect\top
lp2\flags=#TVHT_ONITEM
SendMessage_(GadgetID(0), #TVM_HITTEST, 0, @lp2)
Debug SendMessage_(GadgetID(0), #TVM_GETITEMSTATE, lp2\hItem, #TVIS_STATEIMAGEMASK)
EndSelect
EndIf
ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 355, 180, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
TreeGadget(0, 0, 10, 320, 160, #PB_Tree_CheckBoxes|#PB_Tree_NoLines) ; liste arborescente avec cases à cocher + sans lignes reliant les noeuds
For a = 0 To 10
AddGadgetItem (0, -1, "Elément normal "+Str(a), 0, 0) ; si vous souhaitez ajouter une image, utilisez
AddGadgetItem (0, -1, "Noeud "+Str(a), 0, 0) ; ImageID(x) comme 4ème paramètre
AddGadgetItem (0, -1, "Sous-élément 1", 0, 1) ; Ceux-là sont au premier sous-niveau
AddGadgetItem (0, -1, "Sous-élément 2", 0, 1)
AddGadgetItem (0, -1, "Sous-élément 3", 0, 1)
AddGadgetItem (0, -1, "Sous-élément 4", 0, 1)
AddGadgetItem (0, -1, "Fichier "+Str(a), 0, 0) ; sous-niveau 0 à nouveau
Next
SetWindowCallback(@WindowCallback(), 0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf