DELPHI - 如何使用opendialog1选择文件夹?

Sid*_*ang 4 delphi directory opendialog delphi-2010

可能重复:
Delphi:使用TOpenDialog选择目录

我需要在项目中打开一个特定的文件夹.当我使用opendialog1时,我只能打开一个文件.打开文件夹怎么样?

想要 - 在Delphi中打开文件夹对话框

PS:我使用的是Delphi 2010

Dav*_*nan 13

在Vista及以上版本中,您可以使用显示更加现代的对话框TFileOpenDialog.

var
  OpenDialog: TFileOpenDialog;
  SelectedFolder: string;
.....
OpenDialog := TFileOpenDialog.Create(MainForm);
try
  OpenDialog.Options := OpenDialog.Options + [fdoPickFolders];
  if not OpenDialog.Execute then
    Abort;
  SelectedFolder := OpenDialog.FileName;
finally
  OpenDialog.Free;
end;
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

在此输入图像描述


Ken*_*ite 10

您正在寻找SelectDirectoryFileCtrl单元.它有两个重载版本:

function SelectDirectory(var Directory: string; 
   Options: TSelectDirOpts; HelpCtx: Longint): Boolean;
function SelectDirectory(const Caption: string; const Root: WideString; 
var Directory: string; Options: TSelectDirExtOpts; Parent: TWinControl): Boolean;
Run Code Online (Sandbox Code Playgroud)

您要使用的那个取决于您正在使用的Delphi版本,以及您正在寻找的特定外观和功能; 我(通常发现第二个版本适用于现代版本的Delphi和Windows,用户似乎对"通常预期的外观和功能"感到满意.

  • +1肯,顺便说一句,单位名是`FileCtrl`. (2认同)

ter*_*ran 6

您还可以使用TBrowseForFolderaction class(stdActns.pas):

var
  dir: string;
begin
  with TBrowseForFolder.Create(nil) do try
    RootDir  := 'C:\';
    if Execute then
      dir := Folder;
  finally
    Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

或者SHBrowseForFolder直接使用WinApi函数(第二次SelectDirectory重载使用它,而不是第一次重载,它在运行时使用所有控件创建自己的delphi窗口):

var
  dir : PChar;
  bfi : TBrowseInfo;
  pidl : PItemIDList;
begin
  ZeroMemory(@bfi, sizeof(bfi));
  pidl := SHBrowseForFolder(bfi);
  if pidl <> nil then try
    GetMem(dir, MAX_PATH + 1);
    try
      if SHGetPathFromIDList(pidl, dir) then begin
        // use dir
      end;
    finally
      FreeMem(dir);
    end;
  finally
    CoTaskMemFree(pidl);
  end;
end;
Run Code Online (Sandbox Code Playgroud)