begin process at 2010 02 10 10:22:31
  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 :5 066

Auteur : jockos

Ecrire un message privé
Commentaire sur cette source (8)
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 NEXTGENS -> UNITÉS DE TYPES ÉVOLUÉS NOUVELLE GÉNÉRATION (DE... par f0xi
Source avec Zip Source avec une capture AUTO-COMPLÉTION D'UN CONTRÔLE DE SAISIE par Bacterius
Source avec Zip CARDS GAME SDK 1.0.0.0 par f0xi
Source avec Zip Source avec une capture TRAYICON - VOTRE ICONE DANS LA BARRE DES TACHES par Bacterius
Source avec Zip Source avec une capture WINHIDER _ CACHER UN PROGRAMME DE L'ÉCRAN ET DE LA BARRE DE ... par soldier8514

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

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,952 sec (3)

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