THE INFORMATIQUE

THE INFORMATIQUE

[VB] Remplir un TreeView avec les disques du PC

Voici une routine qui permet de remplir un TreeView avec les disques du système et les répertoires qu'ils contiennent. 

 


Descriptif

Le problème a été de trouver les clés des nodes, il arrivait toujours qu'une clé était éditée en double, puis j'ai trouvé la parade : comme clé, j'ai mis le chemin complet du répertoire et de cette façon, il est certain qu'il n'y aura pas de doublons. 
Je n'ai pas été à même de tester les disques réseaux vu que je n'ai pas de réseau ; à vous de contrôler si vous en avez la possibilité. 
J'ai éliminé les répertoires système, mon but étant de faire un explorateur d'images (disponible au téléchargement). 
La routine est récursive et est relativement courte. 

Ne vous étonnez pas du temps qu'il faut (ça dépend de votre système) mais la routine va pratiquement aussi vite que l'explorateur de Windows sauf qu'elle ne travaille pas à l'initialisation du PC. Pour comparer, voyez le temps que met Windows pour initialiser un disque externe ou une clé. 

Vous pouvez télécharger le projet d'un explorateur d'images complet en VB6. 

Quand vous cliquez sur une image, le message affiche le N° et le chemin complet de l'image, à vous d'en faire ce que vous voulez. 
Vous pouvez aussi modifier les filtres pour permettre l'affichage d'autre images. 

Le projet contient un OCX et une DLL perso, vous devez donc :

  • Dézippez le répertoire.
  • Ne cliquez pas sur le projet, naviguez jusque sur l'icône de VB6, clic droit sur l'icône et ouvrir en tant qu'administrateur.
  • À l'ouverture, cliquez sur 'Existant' et ouvrez le projet LN_Explorateur.vpb (note : ce n'est nécessaire que la première fois, ensuite ça fonctionne normalement).
  • Modifier la largeur de la TreeView en déplaçant la ligne rouge (clic sur la ligne et déplacer).
  • Modifier la grandeur des miniatures avec le bouton 'S'.



L'affichage des images est réalisée avec la dll Gdi+ réduite à sa plus simple expression. 

Je pense que la routine peut-être facilement transposable en VB.Net 

Le Code de la routine

Option Explicit  

Sub Initialise_TreeDir(TreeDir As TreeView)  
Dim ExpDr, Rep, Drv, S As String, N, D, a, r, Unite  
Dim Cle As String, sCle As String, Num As Integer, Sr As Integer  
Dim nodX As Node  
    Num = 64  
    Set ExpDr = CreateObject("Scripting.FileSystemObject")  
    Set Drv = ExpDr.Drives  
    For Each D In Drv  
        S = D.DriveLetter '& ":"  
        If D.DriveType = 3 Then 'réseaux  
            N = D.ShareName  
        ElseIf D.DriveType = 1 Then  'DD externe  
            N = " - Média amovible - (" & D.VolumeName & ")"  
            Incr Num: Cle = S  
            S = S & ":\"  
            Set nodX = TreeDir.Nodes.Add(, , Cle, S & N, 6)  
            AjoutRep S, Cle, TreeDir  
        ElseIf D.DriveType = 2 Then  'DD  
            N = D.VolumeName  
            Incr Num: Cle = S  
            S = S & ":\"  
            Set nodX = TreeDir.Nodes.Add(, , Cle, S & " - (" & N & ")", 2)  
            AjoutRep S, Cle, TreeDir  
        ElseIf D.DriveType = 4 Then 'DVD  
            On Error Resume Next  
            N = D.VolumeName  
            If Err = 71 Then  
                N = "Lecteur DVD - (vide) "  
            Else  
                N = "Lecteur DVD - (" & N & ")"  
            End If  
            Incr Num: Cle = Chr(Num) & "0"  
            S = S & ":\ - "  
            Set nodX = TreeDir.Nodes.Add(, , Cle, S & N, 3)  
        Else  
            Stop  
        End If  
        S = ""  
        D = ""  
    Next  
    Set nodX = Nothing  
    Set ExpDr = Nothing  
    Set Drv = Nothing  

End Sub  

Sub AjoutRep(Chem As String, Cle As String, TreeDir As TreeView)  
Dim Rep, sRp, Obj, sRep, sR2  
Dim sCle As String, Num As Integer, Sr As Integer  
Dim nodX As Node  
Dim NbsR As Integer, S As String  
Sr = 9  
    Chem = Chem & IIf(Right(Chem, 1) = "\", "", "\")  
    Set Obj = CreateObject("Scripting.FileSystemObject")  
    Set Rep = Obj.Getfolder(Chem)  
    If Left(Rep.Name, 1) = "$" Then GoTo Passe2  
    Set sRep = Rep.subfolders  
    For Each sRp In sRep  
        S = UCase(sRp.Name)  
        If Left(S, 1) = "$" Or S = "WINDOWS" Or sRp.Attributes > 100 Or sRp.Attributes = 19 _  
            Or Left(S, 6) = "SYSTEM" Or Left(S, 7) = "PROGRAM" Or Left(S, 4) = "USER" _  
            Or Left(S, 6) = "DRIVER" Or Left(S, 5) = "TOOLS" Then GoTo Passe  
        On Error Resume Next  
        Set sR2 = sRp.subfolders  
        NbsR = sR2.Count  
        If Err <> 0 Then Err = 0: GoTo Passe  
        Incr Sr  
        sCle = sRp.Path & "\"  
        On Error GoTo 0  
        'Debug.Print sRp.Name; "   "; Cle; "  "; sCle  
        Set nodX = TreeDir.Nodes.Add(Cle, tvwChild, sCle, sRp.Name, 5, 4)  
        If NbsR > 0 Then  
            AjoutRep sRp.Path, sCle, TreeDir  
        End If  
Passe:  
    Next  
Passe2:  

    Set Obj = Nothing  
    Set Rep = Nothing  
    Set sRep = Nothing  
    Set nodX = Nothing  
    Set sR2 = Nothing  
End Sub  


Téléchargement


Note

Cette astuce est la première partie d'une appli complète pour le traitement des images qui fera l'objet de publications ultérieures.



13/12/2012
0 Poster un commentaire

A découvrir aussi


Inscrivez-vous au blog

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 2 autres membres