Détecter la Checkbox cochée dans un TreeGadget ?
Détecter la Checkbox cochée dans un TreeGadget ?
Microsoft ne traitant pas un TreeGadgets comme un ListIconGadgets (pour lequel le message #LVN_ITEMCHANGED existe), quelqu'un sait il détecter (par CallBack) la Checkbox qui vient d'etre cochée dans un TreeGadget ?
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
J'avais déja essayé, mais je n'avais pas réussit
Au final, je détecté un clic droit et je regardé par rapport à une liste contenant des booléen pour savoir quelle case avait été cochée/décochée...
Au final, je détecté un clic droit et je regardé par rapport à une liste contenant des booléen pour savoir quelle case avait été cochée/décochée...

Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
Bon, je ne voulais pas faire ainsi mais voici un début de solution :
je retrouve les valeurs 4096 et 8192 caractéristiques du changement d’état.
Il doit y avoir plus élégant car :
- J’ai été obligé de retrouver les coordonnées du curseur par rapport au TreeGadget
- Je n’ai que le handle de l’élément cliqué
je retrouve les valeurs 4096 et 8192 caractéristiques du changement d’état.
Il doit y avoir plus élégant car :
- J’ai été obligé de retrouver les coordonnées du curseur par rapport au TreeGadget
- Je n’ai que le handle de l’élément cliqué
Code : Tout sélectionner
#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