Répertoires dans un treeview

Demandé et répondu par R&B le 27-Sep-2004 12:14

Répertoires dans un treeview

Astuce de la part de Philippe RAMIN, Amélioration de l'idée de Laurent LOISELEUX. Code original sur le site de l'asso.

//Déclarations globales :
gEnroule est un entier
gImage1 est une chaîne=fRépertoireTemp()+'Image1.bmp' // Image d'une
disquette
gImage2 est une chaîne=fRépertoireTemp()+'Image2.bmp' // Image d'un disque
dur
gImage3 est une chaîne=fRépertoireTemp()+'Image3.bmp' // Image d'un CD
gImage4 est une chaîne=fRépertoireTemp()+'Image4.bmp' // Image du Répertoire
enroulé
gImage5 est une chaîne=fRépertoireTemp()+'Image5.bmp' // Image du Répertoire
déroulé

//Vous mettez ce que vous voulez dans les images moi j'ai créé 5 champs images
invisibles (Image1-->5) contenant le code init suivant :

Dc est un entier=dDébutDessin(MoiMême)
hIcon est un entier=0
API('SHELL32','ExtractIconExA','Shell32.dll',6,&hIcon,Null,1)
SI hIcon>1 ALORS
SI API('USER32','DrawIcon',Dc,1,1,hIcon)=0 ALORS
Erreur(ErreurInfo())
FIN
API('USER32','DestroyIcon',hIcon)
FIN
dSauveImageBMP(MoiMême,fRépertoireTemp()+MoiMême..Nom+'.bmp')

//( Dans l'ordre des images : Index=6, 8, 40, 3 et 4 (correspond à l'index de
l'icone dans le Shell32.dll) )

//Créer le treeview <MyLittleTree> bien sur...

//----------------------------------------------------------------------------
-------------
//Initialisation du treeview avec la liste des disques

//Attention :
Si vous utilisez la même méthode que moi pour les images il faut s'assurer
mettre le code suivant dans l'initialisation de la fenêtre (question de DC),
sinon vous pouvez le mettre dans l'init du treeview avec des images en dur :

TheString est une chaîne=NetListeDisque(-1)
cCpt est un entier=1
OneString est une chaîne=ExtraitChaîne(TheString,cCpt,RC)
FichierTemp est une chaîne=''
BOUCLE
   SELON SansEspace(ExtraitChaîne(OneString,2,TAB))
   CAS 'FD':
      ArbreAjoute(MyLittleTree,ExtraitChaîne(OneString,1,TAB)+':',gImage1,gImage1)
   CAS 'HD':
      ArbreAjoute(MyLittleTree,ExtraitChaîne(OneString,1,TAB)+':',gImage2,gImage2)
   CAS 'CD':
      ArbreAjoute(MyLittleTree,ExtraitChaîne(OneString,1,TAB)+':',gImage3,gImage3)
   FIN
   cCpt++
   OneString=ExtraitChaîne(TheString,cCpt,RC)
   SI OneString~='' ALORS
      SORTIR
   FIN
FIN


//----------------------------------------------------------------------------
-------------
//Code d'évènement du treeview

//Au double-clic:
SI gEnroule=aEnroule ALORS
MaSelection est une chaîne=ListeRep(ArbreSelect(MoiMême))
SI PAS MaSelection~='' ALORS
Info('Ma sélection : '+MaSelection)
FIN
FIN

//A l'enroulé/déroulé:
gEnroule=ArbreEtat(MyLittleTree,ArbreSelect(MoiMême))


//----------------------------------------------------------------------------
-------------
//Procédure de LISTEREP utilisée par le double-clic du tree

PROCEDURE ListeRep(xRepertoire)
// Listage de répertoire

cRepertoire est une chaîne=Remplace(xRepertoire,TAB,'')
cString est une chaîne=NetListeRep(cRepertoire+'*.')
cString=ExtraitChaîne(cString,1,RC)
SI cString~='' ALORS
RENVOYER cRepertoire
FIN
cCpt est un entier=1
cOneRep est une chaîne=ExtraitChaîne(cString,cCpt)
cDeroule est un booléen=Faux
TANTQUE cOneRep<>EOT
SI PAS cOneRep~='.' ET PAS cOneRep~='..' ALORS
ArbreAjoute(MyLittleTree,xRepertoire+TAB+cOneRep,gImage4,gImage5)
cDeroule=Vrai
FIN
cCpt++
cOneRep=ExtraitChaîne(cString,cCpt)
FIN
ArbreDéroule(MyLittleTree,xRepertoire)
SI cDeroule ALORS
RENVOYER ''
SINON
RENVOYER cRepertoire
FIN



//----------------------------------------------------------------------------
-------------
//Destruction (fermeture de la fenêtre)

// En option : Le nettoyage peut être fait avant mais pas dans le même
traitement que dDébutDessin...
dFinDessin(Image1)
dFinDessin(Image2)
dFinDessin(Image3)
dFinDessin(Image4)
dFinDessin(Image5)

// En option : supprime les bmp dynamiques
fSupprime(gImage1)
fSupprime(gImage2)
fSupprime(gImage3)
fSupprime(gImage4)
fSupprime(gImage5)

Cette Q&R a été trouvée sur WDForge.org : http://old.wdforge.org/modules/smartfaq/faq.php?faqid=40