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...
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.