我需要打开项目中的一个特定文件夹。当我使用opendialog1时,我只能打开文件。如何打开一个文件夹?
可能是重复问题:
Delphi:使用TOpenDialog选择目录
可能是重复问题:
Delphi:使用TOpenDialog选择目录
PS:我使用Delphi 2010
PS:我使用Delphi 2010
在Windows 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;
这是它的外观:
你正在寻找FileCtrl
单元中的SelectDirectory
函数。它有两个重载版本:
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上运行得非常完美,并且用户对“通常预期的外观和功能”感到满意。
FileCtrl
。 - RRUZFileCtrl
单元中移出了。 - Remy LebeauFileCtrl
函数确实很久以前就被移动到了SysUtils
中,它们的FileCtrl
引用已经被弃用了。我原以为SelectDirectory()
也是其中之一,但我刚刚检查了一下,发现并不是这样。 - Remy Lebeau您也可以使用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;
CoTaskMemFree
。 - OnTheFly
TOpenDialog
的派生类 -TSaveDialog
(是的,这很快速和简单)。 - OnTheFlyteran的回答
。 - TLama