[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
- Site 1 : LN_Explorateur
- Site 2 : LN_Explorateur
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.
A découvrir aussi
- Créer un setup d'installation - Inno Setup Compiler
- Tri par fusion - récursivité-
- Comment bien stocker et vérifier un mot de passe
Inscrivez-vous au blog
Soyez prévenu par email des prochaines mises à jour
Rejoignez les 2 autres membres