begin process at 2012 02 09 02:50:18
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > SÉLECTIONNER UN RÉPERTOIRE (BOITE DE DIALOGUE PARCOURIR... DE WINDOWS)

SÉLECTIONNER UN RÉPERTOIRE (BOITE DE DIALOGUE PARCOURIR... DE WINDOWS)


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Niveau :Débutant Date de création :18/10/2002 Date de mise à jour :18/10/2002 16:21:28 Vu :6 651

Auteur : jockos

Ecrire un message privé
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

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

Source

  • (**---------- 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;
(**---------- 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...


 Sources de la même categorie

Source avec Zip Source avec une capture KINECT TEST V1 par FFCAST
Source avec Zip DÉCOUPER UNE FENÊTRE par gta126
Source avec Zip TRANSCRIRE UN FICHIER OPEN FINANCIAL EXCHANGE (OFX) EN FICHI... par jeffem
Source avec Zip Source avec une capture MSXML 4.0 VALIDATION XML / XSD par redtux
Source avec Zip FBRENOMMEADOBJET par fbalien

Commentaires et avis

Commentaire de Yoann le 19/10/2002 11:12:32

On peut faire ceci :

Uses Filectrl;
Var
Dossier: String; //Recupere le chemin du dossier
begin
SelectDirectory('Choisir un dossier :', '',Dossier);
end;

Commentaire de woom le 21/04/2003 10:48:11

N'étant pas expert dans les APIs, quelle est la structure de BROWSEINFO. Delphi me refuse le code.

Commentaire de cedkat le 26/09/2003 10:32:32

bonjour

Delphi beug sur BROWSINFO et ne compile pas
As- tu une solution qui marche ?

Merci

Commentaire de jockos le 26/09/2003 10:48:35

C'est normal, il faut défnir la structure (Type) BROWSINFO pour que ça marche.

En visual Basic 6 ,ça donne :

Private Type BROWSEINFO
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type

(désolé, mais ça fait plus de 6 mois que j'ai pas fait de Delphi et je ne me rappelle plus trop des syntaxes de déclaration de structure de données).

Commentaire de cedkat le 26/09/2003 14:01:18

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

Commentaire de pl_concept le 25/08/2004 21:58:45

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

Commentaire de FemAeroBen le 07/02/2006 12:11:41

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

Commentaire de ISGIO le 01/12/2009 19:03:39

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

Commentaire de climb69 le 20/05/2010 11:19:08

Bonjour a tous

A titre d'information, le type BROWSEINFO est dans le uses shlObj..

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,278 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales