SelectDirectory + bouton créer un nouveau dossier [Résolu]

joelsprung 4 Messages postés lundi 8 août 2005Date d'inscription 20 décembre 2005 Dernière intervention - 19 déc. 2005 à 11:30 - Dernière réponse : cs_Adkiks 40 Messages postés jeudi 20 mai 2004Date d'inscription 29 janvier 2006 Dernière intervention
- 22 déc. 2005 à 23:40
Bonjour,

Je voudrais savoir si il est possible d'obtenir, d'une manière ou d'une autre, la même boîte de dialogue que celle proposée avec SelectDirectory pour permettre à l'utilisateur de sélectionner un dossier existant, mais avec en plus le bouton "Créer un nouveau dossier". Il semble que que la fonction SelectDirectory ne le permette pas.

Cela doit pourtant être possible, vu que l'API windows implémente bien cette fonctionnalité, mais je ne sais pas comment faire en Delphi.

Merci d'avance...
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Cirec 4224 Messages postés vendredi 23 juillet 2004Date d'inscription 5 juin 2018 Dernière intervention - 20 déc. 2005 à 13:11
3
Merci
Salut,
Essaye ceci, ça fera peut être ton bonheur

// Code testé OK sous Delphi4


var
Form1: TForm1;


Const
BIF_NEWDIALOGSTYLE = $0040; // BIF_NEWDIALOGSTYLE à rajouter si Delphi7 ne le connait pas


implementation


uses ShlObj, ActiveX ; // indispensable


{$R *.DFM}


function IncludeTrailingPathDelimiter( const S: string): string; // à rajouter si Delphi7 ne le connait pas
begin
Result : = S;
If not IsPathDelimiter(Result, Length(Result)) then
Result := Result +'\';
end ;


function IncludeTrailingBackslash(const S: string): string; // à rajouter si Delphi7 ne le connait pas
begin
Result : = IncludeTrailingPathDelimiter(S);
end;


// voici le function qui te permet de sélectionner et où crée un répertoire
function MySelectDirectory(const Title: string;const Root: WideString;var Directory: string; const
Flag:integer): Boolean;
var
RootItemIDList, lpItemID : PItemIDList;
BrowseInfo: TBrowseInfo;
WindowList: Pointer;
IDesktopFolder: IShellFolder;
Eaten, Flags: LongWord;
ShellMalloc: IMalloc;
DisplayName : array[0..MAX_PATH] of char;
TempPath : array[0..MAX_PATH] of char;
begin
Result:= False;
Try
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
RootItemIDList := nil ;
if Root <> '' then
begin
SHGetDesktopFolder(IDesktopFolder);
IDesktopFolder.ParseDisplayName(Application.Handle, nil,
POleStr(Root), Eaten, RootItemIDList, Flags);
end;
with BrowseInfo do begin
hwndOwner : = Application.Handle;
pszDisplayName := @DisplayName;
pidlRoot:= RootItemIDList;
lpszTitle := PChar(Title);
ulFlags := Flag;
end ;
WindowList : = DisableTaskWindows(0);
try
lpItemID := SHBrowseForFolder(BrowseInfo);
finally
EnableTaskWindows(WindowList);
end ;
if lpItemId <> nil then
begin
SHGetPathFromIDList(lpItemID, TempPath);
Directory : = IncludeTrailingBackslash(TempPath);
GlobalFreePtr(lpItemID);
end;
finally
if Succeeded(SHGetMalloc(ShellMalloc)) then
ShellMalloc.Free(RootItemIDList);
end;
end;

// et la methode d'appel
procedure TForm1.Button1Click(Sender: TObject);
Var s : String;
begin
MySelectDirectory('Choix du répertoire', 'c:\', s,BIF_NEWDIALOGSTYLE);
Label1.Caption := s;
end;



@+
Cirec

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 124 internautes ce mois-ci

Commenter la réponse de Cirec
Cirec 4224 Messages postés vendredi 23 juillet 2004Date d'inscription 5 juin 2018 Dernière intervention - 19 déc. 2005 à 12:11
0
Merci
Salut,
il y a deux version de SelectDirectory celle que tu utilises à parament et la deuxième essaye celle-ci:
function SelectDirectory(const Caption: string; const Root: WideString; var Directory: string; Options: TSelectDirExtOpts [sdNewUI]; Parent: TWinControl nil): Boolean; overload;
de l'unité FileCtrl

Procedure TForm1.Button4Click(Sender: TObject);
Var aDir : String; // pour récupérer le répertoire
Begin
If SelectDirectory('Selectionnez un répertoire', 'c:\', aDir, [sdNewFolder, sdNewUI], // ces deux options permettent l'ajout d'un répertoire
Self) // Self = Form1.Handle dans ce cas peut aussi être Nil si pas de parent
Then
Label1.Caption := aDir;
End;



@+
Cirec
Commenter la réponse de Cirec
Cirec 4224 Messages postés vendredi 23 juillet 2004Date d'inscription 5 juin 2018 Dernière intervention - 19 déc. 2005 à 12:29
0
Merci
Ps :
Ne pas oublier de cliquer sur Réponse acceptée lorsque la réponse vous convient.



@+
Cirec
Commenter la réponse de Cirec
joelsprung 4 Messages postés lundi 8 août 2005Date d'inscription 20 décembre 2005 Dernière intervention - 19 déc. 2005 à 13:59
0
Merci
Merci, mais je ne dispose pas de cette version de SelectDirectory, bien intéressante pourtant. Où puis-je me la procurer et comment l'installer ?

Je débute en Delphi, donc pour tout ce qui concerne d'éventuelles mise à jour de la vcl, je suis un peu largué...

merci.
Commenter la réponse de joelsprung
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 19 déc. 2005 à 15:26
0
Merci
qu'elle version de delphi as-tu ?

La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
Commenter la réponse de f0xi
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 19 déc. 2005 à 15:27
0
Merci
trop lol le bug du <HR> dans ma reponse precedente!

Nix un coups de main pour debugger le site ?

La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
Commenter la réponse de f0xi
joelsprung 4 Messages postés lundi 8 août 2005Date d'inscription 20 décembre 2005 Dernière intervention - 19 déc. 2005 à 16:00
0
Merci
J'utilise Delphi 7
Commenter la réponse de joelsprung
joelsprung 4 Messages postés lundi 8 août 2005Date d'inscription 20 décembre 2005 Dernière intervention - 20 déc. 2005 à 16:17
0
Merci
Merci beaucoup !!!
Commenter la réponse de joelsprung
cs_Adkiks 40 Messages postés jeudi 20 mai 2004Date d'inscription 29 janvier 2006 Dernière intervention - 22 déc. 2005 à 23:40
0
Merci
J'ai essayé le code et ca marche bien cependant On ne peut utiliser qu'une seule partition(ici la partition C).Je présume qu'on ne peut pas avoir toutes le partitions en meme temps.En supprimant C:\ on obtient:
MySelectDirectory('Choix du répertoire', '', s,BIF_NEWDIALOGSTYLE);
Et on peut ainsi Acceder a toutes les partitions.
Merci pour le code Cirec
Commenter la réponse de cs_Adkiks

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.