Sélectionner un répertoire (boite de dialogue parcourir... de windows)

Contenu du snippet

Affiche la Boite de Dialogue Windows "Sélectionner un repertoire" quand on clique sur un bouton Parcourir...
Utilise 2 fonctions API.

Source / Exemple :


(**---------- Déclaration des API Functions ----------**)
Function SHGetPathFromIDList (pidl : Integer; pszPath : String) : Integer;
        stdcall;external 'shell32.dll' name 'SHGetPathFromIDListA';

Function SHBrowseForFolder (lpBrowseInfo : BROWSEINFO) : Integer;
        pascal;external 'shell32.dll' name 'SHBrowseForFolderA';

//Affiche l'arborescence des repertoires afin de choisir un Path
Procedure DisplayExplorer();
var
    x : BROWSEINFO;
    Chemin : String;
    pidl : Integer;
    RetVal : Integer;
    p : Integer;

begin
    FillChar(x, SizeOf(x), 0);
    x.hOwner := frmPreferences.Handle; //Handle de l'objet de votre fiche
    x.pidlRoot := 0;
    x.lpszTitle := 'Sélectionnez un répertoire';
    x.ulFlags := 1;

    pidl := SHBrowseForFolder(x);

    Chemin := StringOfChar(Chr(0),512);

    RetVal := SHGetPathFromIDList(pidl, Chemin);
    
    If RetVal <> 0 Then
      begin
        p := Pos(Chr(0),Chemin);
        txtRepertoire.Text := Copy(Chemin,1,p); //txtRepertoire est un TEdit 
    end;
end;

Conclusion :


Pas besoin d'importer ShellApi, puisque j'importe seulement les routines API qui m'interresse avec la clause External.
Notez les clauses "stdcall" et "pascal" pour la méthode d'utilisation des paramètres de ces fonctions API... c'est ce qui m'a le plus fait galérer dans ce code...

A voir également

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.