uses
shlobj;
function DLG_SelectDir(handle: HWND; Title: Pchar; Flags: UINT = BIF_RETURNONLYFSDIRS):string;
//如果取消取返回为空,否则返回选中的路径
var
Info: TBrowseInfo;
IDList: pItemIDList;
Buffer: PChar;
begin
result:='';
Buffer := StrAlloc(MAX_PATH);
with Info do
begin
hwndOwner := Handle; //目录对话框所属的窗口句柄
pidlRoot := nil; //起始位置,缺省为我的电脑
pszDisplayName := Buffer; //用于存放选择目录的指针
lpszTitle := Title ; //对话框提示信息
ulFlags := Flags; //BIF_RETURNONLYFSDIRS or BIF_BROWSEINCLUDEFILES;
//选择参数,此处表示显示目录和文件,如果只显示目录则将后一个去掉即可
{可用的选择标志的说明:
BIF_BROWSEFORCOMPUTER 只能选中计算机的名字,选择其它,OK按钮为灰
BIF_BROWSEFORPRINTER 只能选中打印机的名字,选择其它,OK按钮为灰
BIF_DONTGOBELOWDOMAIN 在域名级别下面不包括网络文件夹
BIF_RETURNFSANCESTORS 只能选中文件系统结点,选择其它,OK按钮为灰
BIF_RETURNONLYFSDIRS 只能选中目录,选择其它,OK按钮为灰
BIF_STATUSTEXT 在对话框里包含一个状态文本,回调函数可以给对话框发送消息
BIF_BROWSEINCLUDEFILES 可以显示文件,同时可以选中
BIF_RETURNONLYFSDIRS+64;
//+64表示可以新建目录,支持右健菜单,+16表示显示一个Edit框。
}
lpfn := nil; //指定回调函数指针
lParam := 0; //传递给回调函数参数
IDList := SHBrowseForFolder(Info); //读取目录信息
end;
if IDList <> nil then
begin
SHGetPathFromIDList(IDList, Buffer); //将目录信息转化为路径字符串
result := strpas(Buffer);
end;
StrDispose(buffer);
end;