Une routine qui permet de remplir un TreeView avec les Disques du système et les répertoires qu?ils contiennent.
Le problème à été de trouver les clés des nodes, il arrivait toujours qu?une clé était éditée en double, puis j?ai trouver 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 auras pas de doublons.
Je n?ai pas été à même de tester les disques réseaux vu que je n?ai pas de réseaux, à 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 travail 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ézipez 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.
A 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éaliser avec la dll Gdi+ réduite à sa plus simple expression.
Source / Exemple :
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
Conclusion :
Je pense que la routine devrait être façilement transposable en VB.Net
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.