Je viens de faire quelques tests sur l'ExplorerTreeGadget, parce que trois fonctions, ça me parait un peu... juste.
Alors voilà, j'arrive, grace à l'Api, et à SendMessage(), à retrouver pas mal de trucs, mais par contre, je n'arrive pas à récupérer l'index d'un élément sélectionné. (Je parle de l'index, pas du handle... 1,2,3,etc..)
J'ai eu beau regarder dans le SDK, rien à faire, je n'ai rien trouvé, et je me vois mal re-parcourir la totalité de l'arborescence à chaque clic, en incrémentant une variable. Dans le cas d'un gros disque, bien chargé, imaginez le temps que ça doit prendre.
Alors si quelqu'un à une idée lumineuse, (ou bien sait quelle fonction de l'Api je dois employer), je vous met le code en dessous.
Code : Tout sélectionner
;- Window Constants
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
Enumeration
#Btn_Exit
#ExplorerTree_3
EndEnumeration
#TVS_CHECKBOXES = $0100
Global hTree.l
Procedure Open_Window_0()
If OpenWindow(#Window_0, 388, 120, 450, 260, #PB_Window_SystemMenu |#PB_Window_ScreenCentered| #PB_Window_TitleBar , "Test sur ''ExplorerTreeGadget''")
HndWin = WindowID(#Window_0)
If CreateGadgetList(WindowID())
ButtonGadget(#Btn_Exit, 10, 235, 100, 20, "Quitter", #PB_Button_Default)
hTree = ExplorerTreeGadget(#ExplorerTree_3, 0, 0, 225, 205, "", #PB_Explorer_AlwaysShowSelection | #PB_Explorer_NoDriveRequester | #PB_Explorer_NoFiles)
TextGadget(100,235,10,200,25,"Racine = ")
TextGadget(101,235,35,200,25,"Courant = ")
TextGadget(102,235,60,200,25,"Suivant = ")
TextGadget(103,235,85,200,25,"Précédent = ")
TextGadget(104,235,110,200,25,"Enfant = ")
TextGadget(105,235,135,200,25,"Parent = ")
TextGadget(106,235,160,200,25,"Check = ")
TextGadget(107,235,185,200,25,"Texte = ")
TextGadget(108,235,210,200,25,"Enfants = ")
EndIf
;- Ajout de CheckBox à l' ExplorerTreeGadget
OldStyle = GetWindowLong_(GadgetID(#ExplorerTree_3),#GWL_STYLE)
NewStyle = OldStyle | #TVS_CHECKBOXES
SetWindowLong_(GadgetID(#ExplorerTree_3),#GWL_STYLE,NewStyle)
EndIf
ProcedureReturn HndWin
EndProcedure
hwnd = Open_Window_0()
Repeat
Select WaitWindowEvent()
Case #PB_EventGadget
Select EventGadgetID()
Case #Btn_Exit : quit = 1
Case #ExplorerTree_3
;- Textes des StringGadgets
;100=Hnd_Racine ,101=Hnd_Courant ,102=Hnd_Suivant ,103=Hnd_Précédent ,
;104=Hnd_Enfant ,105=Hnd_Parent ,106=Check (oui/non) ,107=Texte ; 108=Enfants (oui/non)
RootItem = SendMessage_(hTree,#TVM_GETNEXTITEM,#TVGN_ROOT,0)
CurItem = SendMessage_(hTree,#TVM_GETNEXTITEM, #TVGN_CARET,#NULL)
NextItem = SendMessage_(hTree,#TVM_GETNEXTITEM,#TVGN_NEXT,CurItem)
PrevItem = SendMessage_(hTree,#TVM_GETNEXTITEM,#TVGN_PREVIOUS,CurItem)
ChildItem = SendMessage_(hTree,#TVM_GETNEXTITEM,#TVGN_CHILD,CurItem)
ParItem = SendMessage_(hTree,#TVM_GETNEXTITEM,#TVGN_PARENT,CurItem)
text.s = Space(999)
pitem.TV_ITEM
pitem\mask = #TVIF_TEXT|#TVIF_STATE|#TVIF_CHILDREN
pitem\hItem = CurItem
pitem\pszText = @text
pitem\cchTextMax = 999
lResult = SendMessage_(hTree,#TVM_GETITEM,0, @pitem)
SetGadgetText(100,"Racine = "+Str(RootItem))
SetGadgetText(101,"Courant = "+Str(CurItem))
SetGadgetText(102,"Suivant = "+Str(NextItem))
SetGadgetText(103,"Précédent = "+Str(PrevItem))
SetGadgetText(104,"Enfant = "+Str(ChildItem))
SetGadgetText(105,"Parent = "+Str(ParItem))
SetGadgetText(106,"Check = "+Str(pitem\state >>13))
text.s = PeekS(pitem\pszText)
SetGadgetText(107,"Texte = "+text)
SetGadgetText(108,"Enfants = "+Str(pitem\cChildren))
EndSelect
Case #PB_EventCloseWindow
quit = 1
EndSelect
Until quit = 1
End
Ca marche, mais à mon avis, il doit y avoir une autre méthode. (C'est le 13, qui me paraît bizarre. ). Peut être un "& quelque_chose", mais je ne sais pas!
Chris