仔细研究发现原来是_browseinfoA类型变成了BROWSEINFO类型
其他基本不用变
uses ShlObj;
function SelectFolderDialog(const Handle:integer;const Caption:string;
const InitFolder:string;var SelectedFolder:string):boolean;
var
BInfo: BROWSEINFO;
Buffer: array[0..MAX_PATH] of Char;
ID: IShellFolder;
Eaten, Attribute: Cardinal;
ItemID: PItemidlist;
begin
with BInfo do
begin
HwndOwner := Handle;
lpfn := nil;
lpszTitle := PWideChar(Caption);
ulFlags := BIF_RETURNONLYFSDIRS+BIF_NEWDIALOGSTYLE;
SHGetDesktopFolder(ID);
ID.ParseDisplayName(0,nil,'\',Eaten,ItemID,Attribute);
pidlRoot := ItemID;
GetMem(pszDisplayName, MAX_PATH);
end;
if SHGetPathFromIDList(SHBrowseForFolder(BInfo), Buffer) then
begin
SelectedFolder := Buffer;
if Length(SelectedFolder)<>3 then
SelectedFolder := SelectedFolder;
result := True;
end
else begin
SelectedFolder := '';
result := False;
end;
end;
调用方法:
procedure TForm1.Button1Click(Sender: TObject);
var
NewDir:string;
begin
if SelectFolderDialog(Handle,'选择目录','C:\',NewDir) then
Label1.Caption:=NewDir;
end;
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.050518989562988 seconds