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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 918 fois - Téléchargée 36 fois

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

Ajouter un commentaire

Commentaires

climb69
Messages postés
1
Date d'inscription
mardi 12 mai 2009
Statut
Membre
Dernière intervention
20 mai 2010

Bonjour a tous

A titre d'information, le type BROWSEINFO est dans le uses shlObj..
ISGIO
Messages postés
1
Date d'inscription
lundi 30 novembre 2009
Statut
Membre
Dernière intervention
1 décembre 2009

Bonjour à tous

je voudrais crer un bouton parcourir comme celui de windows afin d'ajouter une photo à la fiche du genre chaque saisie de fiche sa photo correspondant; le hic est que je n'arrive pas à le realiser en delphi 7. Merci de m'aider

ISGIO
FemAeroBen
Messages postés
1
Date d'inscription
lundi 20 septembre 2004
Statut
Membre
Dernière intervention
7 février 2006

En effet il est préférable d'utiliser SelectDirectory.
Cependant il y a un petit bug dans ce code ligne 34:
il ne faut pas ecrire
txtRepertoire.Text := Copy(Chemin,1,p); //txtRepertoire est un TEdit
mais
txtRepertoire.Text := Copy(Chemin,1,p-1); //txtRepertoire est un TEdit
car sinon il reste un caractère #0 dans la chaine
pl_concept
Messages postés
3
Date d'inscription
samedi 31 juillet 2004
Statut
Membre
Dernière intervention
7 octobre 2004

Bonjour.

Merci pour ces infos, mais je vois que ce code est adressé aux débutant...

Mais étant un 'Vrai' débutant, je n'ai pas réussi à utiliser ce code :(

Y aurait-il possibilité d'avoir un projet pour concrétiser ce code ??

Merci
cs_cedkat
Messages postés
172
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2011

re
Merci beaucoup, voila ce qui nous manquer

pour info sous delphi cela donne ca :
Type
BROWSEINFO = record
hOwner : integer ;
pidlRoot : integer ;
pszDisplayName : String ;
lpszTitle : String ;
ulFlags : integer ;
lpfn : integer ;
lParam : integer ;
iImage : integer ;
end ;

Volia et merci encore

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.