Explorateur avec treegadget OK ! Mais l'icone?
Publié : dim. 08/janv./2006 15:35
Pour commencer je vous souhaite une bonne année et plein de jolis programmes pour vous et votre famille
Je viens d'arriver presque au bout de mon explorateur avec un treegadget !
Quel est l'interet ? Par exemple je suis sur un lecteur de photo. Personnellement j'ai un répertoire précis ou je met mes photos, et je n'ai pas envie de voir apparaitre dans mon explorateur tout le reste de mon ordinateur. Alors avec cet explorateur, on précise le repertoire de base et on ne voie pas ce qui au dessus. C'est plus clair !
Des partie de ce code ne sont pas de moi et je remercie au passage ceux qui les ont fait.
Si vous avez des améliorations à apporter, n'hesiter pas.
Par exemple je recherche comment mettre l'icone dossier devant les noms, c'est tout bête mais je m'embrouille...
Voilà le code :
A pluche
Stef

Je viens d'arriver presque au bout de mon explorateur avec un treegadget !
Quel est l'interet ? Par exemple je suis sur un lecteur de photo. Personnellement j'ai un répertoire précis ou je met mes photos, et je n'ai pas envie de voir apparaitre dans mon explorateur tout le reste de mon ordinateur. Alors avec cet explorateur, on précise le repertoire de base et on ne voie pas ce qui au dessus. C'est plus clair !
Des partie de ce code ne sont pas de moi et je remercie au passage ceux qui les ont fait.
Si vous avez des améliorations à apporter, n'hesiter pas.
Par exemple je recherche comment mettre l'icone dossier devant les noms, c'est tout bête mais je m'embrouille...
Voilà le code :
Code : Tout sélectionner
Dim StateOfNodes(1000)
NewList nom_rep.s()
#tree_gadget=1
Procedure remplir_tree(rep$,place_depart,id_gadget_tree)
ClearList(nom_rep())
;{1 : Créer la liste des sous répertoires
Num=-1
If rep$<>""
ExamineDirectory(0, rep$, "")
nb_fichier=0
Repeat
type = NextDirectoryEntry()
If type>0
nom$ = DirectoryEntryName()
If ((type=2) And (nom$=".")) : type=3 : EndIf
If ((type=2) And (nom$="..")) : type=3 : EndIf
If type=2
Num=Num+1
AddElement(nom_rep())
nom_rep()=nom$
EndIf
EndIf
Until type =0 ;***** y a plus de fichier, dans ce répertoire
EndIf;}
;{2 : Trier la liste
SortList(nom_rep(),3,0,Num)
;}
;{3 : Remplir le treegadget
If Num>-1
SelectElement(nom_rep(),Num)
If GetGadgetItemText(id_gadget_tree,place_depart+1,0)<>nom_rep() ; test pour savoir si le tree est déjà rempli
If GetGadgetItemText(id_gadget_tree,place_depart+1,0)="Cliquer sur le rep pour refaire"
RemoveGadgetItem(id_gadget_tree,place_depart+1)
EndIf
rep_sup=0
For i=0 To Num
;insert l'élément i
SelectElement(nom_rep(),i)
OpenTreeGadgetNode(id_gadget_tree, place_depart)
AddGadgetItem(id_gadget_tree, place_depart+1, nom_rep());,ess)
;{ Vérification de l'existance d'un sous sous répertoire
rep_sup=0
ExamineDirectory(0, rep$+nom_rep()+"\", "")
nb_fichier=0
Repeat
type = NextDirectoryEntry()
If type>0
nom$ = DirectoryEntryName()
If ((type=2) And (nom$=".")) : type=3 : EndIf
If ((type=2) And (nom$="..")) : type=3 : EndIf
If type=2
rep_sup=1 ; il y a des sous répertoire dans ce répertoire
EndIf
EndIf
Until type =0 Or rep_sup=1;***** y a plus de fichier, dans ce répertoire
;}
If rep_sup=1 ;il y a des sous répertoire on crer un sous tree
OpenTreeGadgetNode(id_gadget_tree, place_depart+1)
AddGadgetItem(id_gadget_tree, place_depart+2, "Cliquer sur le rep pour refaire")
CloseTreeGadgetNode(id_gadget_tree)
EndIf
Next
EndIf
EndIf
;}
EndProcedure
Procedure.s chemin_tree_num(Num,id_gadget_tree)
FullPath.s=""
CurrentItem.l = Num
CurrentText.s = GetGadgetItemText(id_gadget_tree, CurrentItem, 0)
ItemToWalk.l = CurrentItem
FullPath = CurrentText.s
Repeat
hItem.l = GadgetItemID(id_gadget_tree, ItemToWalk)
hParent.l = SendMessage_(GadgetID(id_gadget_tree), #TVM_GETNEXTITEM, #TVGN_PARENT, hItem)
ParentNumber.l = TreeGadgetItemNumber(id_gadget_tree, hParent)
ParentText.s = GetGadgetItemText(id_gadget_tree, ParentNumber, 0)
FullPath.s = ParentText + "\" + FullPath
ItemToWalk = ParentNumber
Until ItemToWalk = -1
If Left(FullPath.s, 1) = "\"
FullPath.s = Mid(FullPath.s, 2, Len(FullPath.s) - 1)
EndIf
ProcedureReturn FullPath
EndProcedure
Procedure.l DetectClickOnNodeCross(id_gadget_tree)
For i = 0 To CountGadgetItems(id_gadget_tree)-1
If StateOfNodes(i) <> #PB_Tree_Expanded & GetGadgetItemState(id_gadget_tree,i)
StateOfNodes(i) = #PB_Tree_Expanded & GetGadgetItemState(id_gadget_tree,i)
ProcedureReturn(i)
EndIf
Next i
ProcedureReturn(-1)
EndProcedure
Procedure.s gestion_tree_gadget(Repertoire_base$,id_gadget_tree)
If EventType()=0
NodeClicked = DetectClickOnNodeCross(id_gadget_tree)
If NodeClicked <> -1 ;si l'utilisateur clic sur un noeud
remplir_tree(Repertoire_base$+chemin_tree_num(NodeClicked,id_gadget_tree)+"\",NodeClicked,id_gadget_tree)
Else ;si l'utilisateur doubleclic sur un répertoire il faut le remplir aussi
remplir_tree(Repertoire_base$+chemin_tree_num(GetGadgetState(id_gadget_tree),id_gadget_tree),GetGadgetState(id_gadget_tree),id_gadget_tree)
EndIf
EndIf
ProcedureReturn Repertoire_base$+chemin_tree_num(GetGadgetState(id_gadget_tree),id_gadget_tree)+"\"
EndProcedure
OpenWindow(0,10,10,500,500,#PB_Window_SystemMenu,"ess")
CreateGadgetList(WindowID())
TreeGadget(#tree_gadget,10,10,240,400,#PB_Tree_AlwaysShowSelection )
remplir_tree("c:\",-1,#tree_gadget)
Repeat
Evenement=WaitWindowEvent()
If EventWindowID()=0
Select Evenement
Case #PB_EventGadget; *****************Choix d'un bouton
Select EventGadgetID()
Case #tree_gadget
dossier_selectionner$=gestion_tree_gadget("c:\",#tree_gadget)
Debug "---------------"
Debug dossier_selectionner$
EndSelect
Case #WM_CLOSE ; ***************************#PB_EventCloseWindow
Quit=1
EndSelect
EndIf
Until Quit = 1
End
Stef