Sid*_*ang 4 delphi directory opendialog delphi-2010
可能重复:
Delphi:使用TOpenDialog选择目录
我需要在项目中打开一个特定的文件夹.当我使用opendialog1时,我只能打开一个文件.打开文件夹怎么样?

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
您正在寻找SelectDirectory的FileCtrl单元.它有两个重载版本:
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,用户似乎对"通常预期的外观和功能"感到满意.
您还可以使用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)