我需要在我的项目上打开一个特定的文件夹。当我使用 opendialog1 时,我只能打开一个文件。打开一个文件夹怎么样?
PS:我用的是 Delphi 2010
我需要在我的项目上打开一个特定的文件夹。当我使用 opendialog1 时,我只能打开一个文件。打开一个文件夹怎么样?
PS:我用的是 Delphi 2010
在 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;
看起来像这样:
你在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;
您要使用的取决于您使用的 Delphi 版本,以及您正在寻找的特定外观和功能;我(通常发现第二个版本非常适合现代版本的 Delphi 和 Windows,用户似乎对“通常预期的外观和功能”感到满意。
您还可以使用TBrowseForFolder
操作类 ( stdActns.pas
):
var
dir: string;
begin
with TBrowseForFolder.Create(nil) do try
RootDir := 'C:\';
if Execute then
dir := Folder;
finally
Free;
end;
end;
或直接使用 WinApi 函数SHBrowseForFolder
(第二次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;