Bonjour j'aimerais savoir si on peut détecter que l'utilisateur a cliqué sur un noeud d'un TreeGadget (le case +).
Car je voulais faire un genre de PathRequester(), le pb c'est que j'étais obligé de le remplir complétement(et donc entièrement scanner mon DD), car je n'arrive pas à détecté que l'utilisateur descent dans l'arborescence en cliquant sur les '+'. Qd il fait une double clique sur un item, cela ne pose pas de pb, ms dans le cas précédent si.
Donc est-ce qq1 connait une méthode... (j'ai regardé dans l'aide, ms je n'ai rien trouvé)
Merci
Pb avec les TreeGadget
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
Pb avec les TreeGadget
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
OK merci.
Bon tant pis.
c'étais juste pour m'amuser à faire un petit programme sans trop d'intérêt, mais bon...
Je m'amuserais pe etre à coder une fonction de repérage, mais car ça ne me semble pas aussi complexe que ça... Il faudrait mémoriser l'état des anciens noeuds et donc déterminer celui qui à été sélectionné...
Bon tant pis.
c'étais juste pour m'amuser à faire un petit programme sans trop d'intérêt, mais bon...

Je m'amuserais pe etre à coder une fonction de repérage, mais car ça ne me semble pas aussi complexe que ça... Il faudrait mémoriser l'état des anciens noeuds et donc déterminer celui qui à été sélectionné...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
J'ai trouvé un petit code avec 2 fonctions pour le repérage des clique sur les noeuds !!
Voici mon code :
Je n'ai pas rencontré de problème. Tout semble bien marcher !!!

Je n'ai pas tresté avec plusieurs arbres, il pourait y avoir des conflits. Dans un cas multi objets, il faudrait faire ca de façon un peu plus rigoureuse.
Mais là ça marche !

Voici mon code :
Code : Tout sélectionner
#CLICK_ON_NODE = 13100
#TREE = 0
Dim StateOfNodes(1000)
Declare CompleteTableOfNode(GadgetNum.b)
Declare.l DetectClickOnNodeCross(GadgetNum.b)
; creation de l'arbre (prit des exemples PureBasic)
If OpenWindow(0,0,0,355,180,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"TreeGadget") And CreateGadgetList(WindowID(0))
TreeGadget(#TREE, 10,10,160,160) ; TreeGadget standard
For a=0 To 10
AddGadgetItem (#TREE, -1, "Normal Item "+Str(a)) ; if you want to add an image, use
AddGadgetItem (#TREE, -1, "Node "+Str(a)) ; UseImage(x) as 4th parameter
OpenTreeGadgetNode(ID)
AddGadgetItem(#TREE, -1, "Sub-Item 1")
AddGadgetItem(#TREE, -1, "Sub-Item 2")
AddGadgetItem(#TREE, -1, "Sub-Item 3")
AddGadgetItem(#TREE, -1, "Sub-Item 4")
CloseTreeGadgetNode(ID)
AddGadgetItem (#TREE, -1, "File "+Str(a))
Next
; liste les états des différents noeuds
CompleteTableOfNode(#TREE)
OpenConsole()
Repeat
EventID = WaitWindowEvent()
; clique sur un noeud
If EventID = #CLICK_ON_NODE
NodeClicked = DetectClickOnNodeCross(#TREE)
If NodeClicked <> -1
PrintN(Str(NodeClicked) + " : " + GetGadgetItemText(#TREE,NodeClicked,0))
EndIf
EndIf
Until EventID=#PB_Event_CloseWindow
EndIf
CloseConsole()
End
Procedure CompleteTableOfNode(GadgetNum.b)
For i = 0 To CountGadgetItems(GadgetNum)-1
StateOfNodes(i) = #PB_Tree_Expanded & GetGadgetItemState(GadgetNum,i)
Next i
EndProcedure
Procedure.l DetectClickOnNodeCross(GadgetNum.b)
For i = 0 To CountGadgetItems(GadgetNum)-1
If StateOfNodes(i) <> #PB_Tree_Expanded & GetGadgetItemState(GadgetNum,i)
StateOfNodes(i) = #PB_Tree_Expanded & GetGadgetItemState(GadgetNum,i)
ProcedureReturn(i)
EndIf
Next i
ProcedureReturn(-1)
EndProcedure


Je n'ai pas tresté avec plusieurs arbres, il pourait y avoir des conflits. Dans un cas multi objets, il faudrait faire ca de façon un peu plus rigoureuse.
Mais là ça marche !

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, ben tant pis, moi, j'avais fait ça:
Code : Tout sélectionner
Info.TV_HITTESTINFO
If OpenWindow(0,0,0,355,180,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"TreeGadget")
If CreateGadgetList(WindowID(0))
TreeGadget(0, 10,10,160,160) ; TreeGadget standard
For a=0 To 10
AddGadgetItem (ID, -1, "Normal Item "+Str(a)) ; if you want to add an image, use
AddGadgetItem (ID, -1, "Node "+Str(a)) ; UseImage(x) as 4th parameter
OpenTreeGadgetNode(ID)
AddGadgetItem(ID, -1, "Sub-Item 1")
AddGadgetItem(ID, -1, "Sub-Item 2")
AddGadgetItem(ID, -1, "Sub-Item 3")
AddGadgetItem(ID, -1, "Sub-Item 4")
CloseTreeGadgetNode(ID)
AddGadgetItem (ID, -1, "File "+Str(a))
Next
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_EventGadget
Select EventGadgetID()
Case 0
If EventType() = #PB_EventType_LeftClick
GetCursorPos_(@Pos.POINT)
ScreenToClient_(GadgetID(0),@Pos.POINT)
Info\pt\x = Pos\x : Info\pt\y = Pos\y
SendMessage_(GadgetID(0),#TVM_HITTEST,0,@Info)
If Info\flags & #TVHT_ONITEMBUTTON
SendMessage_(GadgetID(0),#TVM_SELECTITEM,#TVGN_CARET,Info\hItem)
Debug "L'élément "+Str(GetGadgetState(0))+" a été selectionné"
EndIf
If GetGadgetItemState(0,GetGadgetState(0)) &#PB_Tree_Expanded
Debug "la branche est ouverte"
ElseIf GetGadgetItemState(0,GetGadgetState(0)) &#PB_Tree_Collapsed
Debug "la branche est fermée"
EndIf
EndIf
EndSelect
Case #PB_EventCloseWindow
Quit = #True
EndSelect
Until Quit
EndIf
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
Ton prog doit être plus efficace que le mien, il possède moins de contraite (pas de tableau...), mais bon j ene pige pas tout (le manque d'expérience sous PB
)
Merci pour cette réponse en tt cas !

Merci pour cette réponse en tt cas !

Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !