[TreeGadget] To detect the Checkbox which has just changed?

Everything else that doesn't fall into one of the other PB categories.
Dräc
Enthusiast
Enthusiast
Posts: 150
Joined: Sat Oct 09, 2004 12:10 am
Location: Toulouse (France)
Contact:

[TreeGadget] To detect the Checkbox which has just changed?

Post by Dräc »

Microsoft doesn’t manage TreeGadgets as ListIconGadgets (for which the notified message #LVN_ITEMCHANGED exists)
Somebody knows how to detect (by CallBack) the Checkbox which has just changed in a TreeGadget?
Dräc
Enthusiast
Enthusiast
Posts: 150
Joined: Sat Oct 09, 2004 12:10 am
Location: Toulouse (France)
Contact:

Post by Dräc »

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
Post Reply