Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1274 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Sélectionner un fichier ou un dossier dans la même boîte de dialogue

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Sélectionner un fichier ou un dossier dans la même boîte de dialogue

n°1778693
konglihong
Posté le 27-08-2008 à 22:52:43  profilanswer
 

Bonjour,
 
Je cherche à afficher une boîte de dialogue qui puisse permettre de choisir soit un fichier, soit un dossier. Quelque chose dans le genre de la boîte de raccourcis Windows :
 
http://www.3dna.net/support/help/images/changelink.jpg
 
Est-ce que c'est faisable en Delphi, et si oui quelle fonction appeler ?
 
Laurent

mood
Publicité
Posté le 27-08-2008 à 22:52:43  profilanswer
 

n°1779062
rengzehn
Posté le 28-08-2008 à 13:46:47  profilanswer
 

Onglet dialogue : tu as des composants de ce genre.  
OpenDialog pour ouvrir, SaveDialog pour enregistrer.
Pour les utiliser tu places simplement un des compos sur ton formulaire. Le nom du fichier/dir selectionné après avoir cliqué sur OK est stocké dans la propriété FileName du Dialog.
Généralement on les utilise de la façon suivante :
 
if OpenDialog1.Execute then toto.loadfromfile(OpenDialog1.FileName);
 
 
 

n°1779425
konglihong
Posté le 28-08-2008 à 20:42:07  profilanswer
 

Merci, mais tu fais comment pour sélectionner un dossier avec TOpenDialog ? J'ai essayé un peu toutes les options mais je n'ai rien trouvé. Si tu as une idée...


Message édité par konglihong le 28-08-2008 à 21:42:29
n°1779638
ouiouioui1​0
ChuckNorris sait diviser par 0
Posté le 29-08-2008 à 10:23:32  profilanswer
 

pour les dossiers:

Code :
  1. function SelectDirectory(var Directory: string; Options: TSelectDirOpts; HelpCtx: Longint): Boolean; overload;
  2. function SelectDirectory(const Caption: string; const Root: WideString; var Directory: string; Options: TSelectDirExtOpts = [sdNewUI]; Parent: TWinControl = nil): Boolean; overload;


 
exemple:

Code :
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   ActualDir: String;
  4. begin
  5.   ActualDir := 'C:\';
  6.   if SelectDirectory('blablablaaaaaa', '', ActualDir) then
  7.   begin
  8.     showmessage('dossier selectionné: ' + ActualDir);
  9.   end;
  10. end;


Message édité par ouiouioui10 le 29-08-2008 à 10:30:14
n°1779821
laurent223​00
Posté le 29-08-2008 à 12:45:09  profilanswer
 

Oui mais ce que je cherche à faire c'est permettre de sélectionner un fichier et/ou un dossier depuis la même boite de dialogue. C'est à dire comme dans la capture d'écran ci-dessus. Il me semble l'avoir fait il y a quelques années mais je ne me rappelle plus comment.
 
Je suppose que s'il n'y a pas de componsant pour le faire ça doit être une fonction de l'API Win32, mais je ne trouve pas. Si quelqu'un pouvait me pointer dans la bonne direction...

n°1779949
rengzehn
Posté le 29-08-2008 à 13:42:07  profilanswer
 

Ah ué on ne peut pas select un dossier avec l'opendialog... J'ai pas de réponse désolé :D

n°1780265
laurent223​00
Posté le 30-08-2008 à 01:11:26  profilanswer
 

Pas de soucis, j'ai l'impression que c'est pas très commun comme boite de dialogue :D J'ai juste trouvé cet exemple mais c'est en C :(  
 
Sinon est-ce que c'est faisable de customiser ces boites pour les faire accepter des fichiers ou dossiers ? Quelqu'un a une idée ?

n°1781044
laurent223​00
Posté le 01-09-2008 à 16:37:42  profilanswer
 

Pas d'autres suggestions ? Tout le monde est passé à .NET ou quoi ? :D

n°1781100
rengzehn
Posté le 01-09-2008 à 17:34:59  profilanswer
 

J'en aurais bien une, tu crées toi meme un formulaire à ton projet qui va servir de fenetre modale comme un opendialog. Dedans tu rajoutes,
DirectoryListBox, FileListBox, DriveComboBox. Tu les relies par les bonnes propriétés qui font que quand tu changes de drive, ça update ton tree..
Tu mets deux boutons et tu geres les évènements. Genre le user qui clique deux fois sur un répertoire=> return du rep. Quand la personne clique sur ok, tu regardes ce qui est select dans les boites. Si un fichier est select tu retournes le fichier sinon le rep. Tu dois pouvoir gerer aussi qui si une personne clique sur un fichier, ça deselect le dir sélectionné et si la personne change de rep, ça deselectionne les fichier. Sur l'appui de ok, tu regardes ce qui est selectionné.
 
http://img524.imageshack.us/img524/9244/graphique1rp0.jpg

n°1781558
laurent223​00
Posté le 02-09-2008 à 17:56:02  profilanswer
 

Merci je vais essayer ça. J'aurais préféré éviter de le faire "à la main", mais ça n'a pas l'air trop compliqué en utilisant les composants de Delphi.

mood
Publicité
Posté le 02-09-2008 à 17:56:02  profilanswer
 

n°1782482
ouiouioui1​0
ChuckNorris sait diviser par 0
Posté le 04-09-2008 à 11:36:33  profilanswer
 

j'ai trouvé sa: http://www.commentcamarche.net/tel [...] escription
mais je sais pas si il y a l'option que tu veux
 

n°1783330
laurent223​00
Posté le 06-09-2008 à 00:12:09  profilanswer
 

Finalement j'ai opté pour la solution à rengzehn, merci encore :jap: Les TDriveComboBox, TDirectoryListBox et TFileListBox simplifient grandement les choses (par contre les icones style Window 3.1 sont horribles :sweat: )
 
Voilà le code complet au-cas-où ça intéresse quelqu'un :
 
 
SelectFolderOrFileUnit.pas :
 

Code :
  1. unit SelectFolderOrFileUnit;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls, FileCtrl;
  6. type
  7.   TSelectFolderOrFileForm = class(TForm)
  8.     DirectoryListBox1: TDirectoryListBox;
  9.     FileListBox1: TFileListBox;
  10.     DriveComboBox1: TDriveComboBox;
  11.     cancelButton: TButton;
  12.     selectFileButton: TButton;
  13.     selectFolderButton: TButton;
  14.     procedure DriveComboBox1Change(Sender: TObject);
  15.     procedure DirectoryListBox1Change(Sender: TObject);
  16.     procedure cancelButtonClick(Sender: TObject);
  17.     procedure selectFolderButtonClick(Sender: TObject);
  18.     procedure selectFileButtonClick(Sender: TObject);
  19.     procedure FileListBox1Change(Sender: TObject);
  20.     procedure FormCreate(Sender: TObject);
  21.     procedure FileListBox1DblClick(Sender: TObject);
  22.   private
  23.     { Private declarations }
  24.     procedure UpdateAll();
  25.   public
  26.     { Public declarations }
  27.     FilePath: String;
  28.     procedure ConfirmForm();
  29.     procedure CancelForm();
  30.   end;
  31. var
  32.   SelectFolderOrFileForm: TSelectFolderOrFileForm;
  33. implementation
  34. {$R *.dfm}
  35. procedure TSelectFolderOrFileForm.cancelButtonClick(Sender: TObject);
  36. begin
  37.   CancelForm();
  38. end;
  39. procedure TSelectFolderOrFileForm.selectFileButtonClick(Sender: TObject);
  40. begin
  41.   FilePath := FileListBox1.FileName;
  42.   ConfirmForm();
  43. end;
  44. procedure TSelectFolderOrFileForm.selectFolderButtonClick(Sender: TObject);
  45. begin
  46.   FilePath := DirectoryListBox1.Directory;
  47.   ConfirmForm();
  48. end;
  49. procedure TSelectFolderOrFileForm.CancelForm;
  50. begin
  51.   ModalResult := mrCancel;
  52. end;
  53. procedure TSelectFolderOrFileForm.ConfirmForm;
  54. begin
  55.   ModalResult := mrOK;
  56. end;
  57. procedure TSelectFolderOrFileForm.DirectoryListBox1Change(Sender: TObject);
  58. begin
  59.   UpdateAll();
  60. end;
  61. procedure TSelectFolderOrFileForm.DriveComboBox1Change(Sender: TObject);
  62. begin
  63.   UpdateAll();
  64. end;
  65. procedure TSelectFolderOrFileForm.FileListBox1Change(Sender: TObject);
  66. begin
  67.   UpdateAll();
  68. end;
  69. procedure TSelectFolderOrFileForm.FileListBox1DblClick(Sender: TObject);
  70. begin
  71.   FilePath := FileListBox1.FileName;
  72.   ConfirmForm();
  73. end;
  74. procedure TSelectFolderOrFileForm.FormCreate(Sender: TObject);
  75. begin
  76.   UpdateAll();
  77. end;
  78. procedure TSelectFolderOrFileForm.UpdateAll;
  79. begin
  80.   try
  81.     DirectoryListBox1.Drive := DriveComboBox1.Drive;
  82.     FileListBox1.Directory := DirectoryListBox1.Directory;
  83.   except
  84.     on e: Exception do ;
  85.   end;
  86.   selectFolderButton.Enabled := DirectoryListBox1.Directory <> '';
  87.   selectFileButton.Enabled := FileListBox1.FileName <> '';
  88. end;
  89. end.


 
SelectFolderOrFileUnit.dfm :
 

Code :
  1. object SelectFolderOrFileForm: TSelectFolderOrFileForm
  2.   Left = 0
  3.   Top = 0
  4.   BorderStyle = bsDialog
  5.   Caption = 'SelectFolderOrFileForm'
  6.   ClientHeight = 272
  7.   ClientWidth = 451
  8.   Color = clBtnFace
  9.   Font.Charset = DEFAULT_CHARSET
  10.   Font.Color = clWindowText
  11.   Font.Height = -11
  12.   Font.Name = 'Tahoma'
  13.   Font.Style = []
  14.   OldCreateOrder = False
  15.   OnCreate = FormCreate
  16.   PixelsPerInch = 96
  17.   TextHeight = 13
  18.   object DirectoryListBox1: TDirectoryListBox
  19.     Left = 16
  20.     Top = 40
  21.     Width = 209
  22.     Height = 177
  23.     ItemHeight = 16
  24.     TabOrder = 0
  25.     OnChange = DirectoryListBox1Change
  26.   end
  27.   object FileListBox1: TFileListBox
  28.     Left = 231
  29.     Top = 16
  30.     Width = 202
  31.     Height = 201
  32.     ItemHeight = 16
  33.     ShowGlyphs = True
  34.     TabOrder = 1
  35.     OnChange = FileListBox1Change
  36.     OnDblClick = FileListBox1DblClick
  37.   end
  38.   object DriveComboBox1: TDriveComboBox
  39.     Left = 16
  40.     Top = 15
  41.     Width = 209
  42.     Height = 19
  43.     TabOrder = 2
  44.     OnChange = DriveComboBox1Change
  45.   end
  46.   object cancelButton: TButton
  47.     Left = 333
  48.     Top = 232
  49.     Width = 100
  50.     Height = 25
  51.     Caption = 'Cancel'
  52.     TabOrder = 3
  53.     OnClick = cancelButtonClick
  54.   end
  55.   object selectFileButton: TButton
  56.     Left = 229
  57.     Top = 232
  58.     Width = 100
  59.     Height = 25
  60.     Caption = 'Select file'
  61.     TabOrder = 4
  62.     OnClick = selectFileButtonClick
  63.   end
  64.   object selectFolderButton: TButton
  65.     Left = 124
  66.     Top = 232
  67.     Width = 100
  68.     Height = 25
  69.     Caption = 'Select folder'
  70.     TabOrder = 5
  71.     OnClick = selectFolderButtonClick
  72.   end
  73. end


Message édité par laurent22300 le 06-09-2008 à 00:12:43
n°1784876
ouiouioui1​0
ChuckNorris sait diviser par 0
Posté le 10-09-2008 à 10:33:04  profilanswer
 

Merci, rajoute [Réglé] dans le titre de ton sujet ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Sélectionner un fichier ou un dossier dans la même boîte de dialogue

 

Sujets relatifs
Copie de fichier sur reseau ?lecture d'un fichier swf (sur un serveur) dans une page PHP
Cpie de fichier [RESOLU]Stocker fichier / bdd mysql et Traffic/Charge serveur
problème fichier CProblème accès au fichier sur le disque...
[Résolu] Problème d'upload de fichier[RESOLU] [VBA excel] copier un fichier d'un repertoire a un autre
compter le nombre de ligne d'un fichiercopier 2 fichiers txt en un tableau dans un 3ème fichier avec c++
Plus de sujets relatifs à : Sélectionner un fichier ou un dossier dans la même boîte de dialogue


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR