Page 1 sur 1

[Tuto] Chemin d'accès de fichiers dans un ListView.

Posté : ven. 22 juil. 2011 22:46
par ZOTHOP
Bonjour,

Tuto concernant les Array, FileOpenDialog et ListView.

Ce tutoriel consiste à intégrer des chemins d'accès de fichiers dans un ListView. Cette procédure est utilisée dans des logiciels qui permettent de sélectionner des fichiers et les supprimer pour faire le ménage sur le disque dur.

Les logiciels comme l'Ordinateur ( Windows Vista et 7 ) qui permettent d'explorer les disques et gérer les fichiers sont d'autres exemples de logiciels qui intègrent des chemins d'accès de fichiers dans des ListView, surtout quand on affiche ces fichiers avec leurs détails. Leurs noms, leurs tailles, leurs icônes, leurs dates de création ainsi que leurs chemins d'accès sont affichés dans des ListView à plusieurs colonnes. Heureusement, la GUI de ce tuto ne comprend qu'une colonne :D .

Première étape : savoir récupérer les chemins d'accès des fichiers avec un FileOpenDialog

Le script ci dessus permet de découper la chaine de donnée récupérée avec FileOpenDialog, l'intégrer dans un array avec StringSplit et afficher le contenu de cet array avec _ArrayDisplay pour voir comment il se compose et voir quelles données utiliser par la suite.

Utilisez ce script sur des fichiers sans importance !

Code : Tout sélectionner

#include <Array.au3>

$message = "Sélectionnez des fichiers"

$var = FileOpenDialog($message, @DocumentsCommonDir & "\", "Tout types (*.*)", 1 + 4 )

If @error Then
    MsgBox(4096,"","Pas de fichiers sélectionnés")
Else
    $a=StringSplit($var,"|") ; 
    _ArrayDisplay($a,""); 
EndIf
 
Un FileOpenDialog va s'ouvrir dans le dossier Mes documents avec le filtre *.*, en sélection multiple grace à l'option 4. $Var va contenir le ou les fichiers sélectionnés.
Sélectionnez un fichier. Il va être intégré dans un array $a grâce à $a=StringSplit($var,"|"), l'array va s'afficher dans un tableau grâce à _ArrayDisplay($a,"") . Remarquez que $a[0] contient la valeur de 1 car il n'y a qu'un seul array $a[1] qui contient le chemin d'accès complet du fichier sélectionné.

La valeur de $a[0] est importante, elle va être utilisée par la suite dans une boucle pour intégrer les chemins d'accès des fichiers dans des ListViewItem.

Sélectionnez ensuite trois fichiers avec le FileOpenDialog, $var contient une chaine qui se compose comme suit :

Lettre du disque:\Non du dossier|Fichier1|Fichier2|Fichier3

$a=StringSplit($var,"|") va ainsi découper la chaine en prenant les | comme point de repère , remarquez ensuite dans le tableau que $a[0] = 4 puisque nous avons récupéré quatre données :

$a[1] = Lettre du disque:\Non du dossier
$a[2] = Fichier1
$a[3] = Fichier2
$a[4] = Fichier3

Remarquez aussi, chose importante, qu' à la fin de « Lettre du disque:\Non du dossier », il n'y a pas de « \ », il faudra penser à le rajouter quand on voudra assembler les chemins d'accès avant de les intégrer dans le ListView.

Seconde étape : Intégration des chemins d'accès dans un ListView.

( Voir les commentaires à l'intérieur du script de la GUI ci dessous, utilisez ce script sur des fichiers sans importance ! )

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### 
$Form1 = GUICreate("Form1", 690, 520, 192, 124) ; création du formulaire.
$ListView1 = GUICtrlCreateListView(" ", 120, 40, 433, 425) ; intégration du ListView et création d'une colonne grâce à " ").
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 429) ; taille de la colonne.
$Add = GUICtrlCreateButton("Add", 256, 472, 161, 41) ; ajout du bouton Add.
GUISetState(@SW_SHOW) ; affichage du formulaire.
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Select
    Case $nMsg=$Add ; clic sur le bouton Add
        
$addfile=FileOpenDialog("Ajouter des fichiers","c:\","Tous types (*.*)",1+4) ; ouverture du FileOpenDialog.
if @error Then ; si il n'y a pas de fichier(s) sélectionné(s).
    MsgBox(4096,"","Pas de fichier(s) sélectionné(s)")
    Else ; si il y a un ou plusieurs fichier(s) sélectionné(s).
    $files=StringSplit($addfile,"|") ; découpage de la sélection ($addfile) en prenant | comme repère en cas de sélection multiple et intégration dans un array ( $files ). Rappel en cas de sélection multiple $addfile = lettre du disque:\nom du dossier|fichier1|fichier2|fichier3 etc...
    
EndIf

#cs
---------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------
Ici nous entrons dans la section qui permet d'intégrer les chemins d'accès du ou des fichiers dans le ListView grâce à des ListViewItem.
---------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------
#ce

If $files[0]=1 Then ; en cas de sélection d'un fichier, $files[0] contient alors 1 puisqu'il n'y a que $files[1] qui contient le chemin d'accès complet du fichier sélectionné.
    $item= GUICtrlCreateListViewItem($files[1],$ListView1) ; création d'un ListViewitem avec le chemin d'accès du fichier contenu dans $files[1].
elseif $files[0]>1 then ; en cas de sélection multiple $files[0] contient alors un nombre qui correspond à autant de $files[] qu'il y a de noms de fichiers dont la lettre du disque et le nom du dossier dans $files[1]. L'array contient les noms des fichiers à partir de $files[2].
    for $a=2 to $files[0] ; création d'une boucle pour créer autant de ListViewItem qu'il y a de fichiers.
        $item= GUICtrlCreateListViewItem($files[1]&"\"&$files[$a], $ListView1); création des ListViewItem $files[1] correspond à la lettre du disque et au dossier sans le \ à la fin donc on l'ajoute (&"\") puis on intégre le nom du fichier $files[$a], $a commence la boucle à 2 puisque les noms des fichiers se trouvent à partir de $files[2] dans l'array.
    Next
EndIf

    

    EndSelect
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
Wend
 
Je tiens à signaler que je débute en AutoIt, je ne suis pas programmeur professionnel ( je suis chef de rayon dans un supermarché ça n'a rien à voir je sais :D ), je programme par plaisir de créer et par défis intellectuel.

En espérant avoir été clair dans mes explications et que cela vous serve un jour !

Re: [Tuto] Chemin d'accès de fichiers dans un ListView.

Posté : ven. 22 juil. 2011 22:55
par timmalos
Je ne doute pas que ce sujet sera utile à beaucoup de gens vu le nombre de demandes concernant les listview et les fichiers, Merci pour votre travail

Re: [Tuto] Chemin d'accès de fichiers dans un ListView.

Posté : mar. 02 août 2011 11:34
par mikell
Ce script est une bonne idée, c'est pour ça que je me suis permis quelques réglages de détail
► Afficher le texte