Delphi11 使用windows新版的文件夹选择对话框

一直使用经典版本的选择文件夹对话框

Delphi11 使用windows新版的文件夹选择对话框

代码如下:

function SelectDirectory(const Caption: string; const Root: WideString; var Directory: string): Boolean;

var

WindowList: Pointer;

BrowseInfo: TBrowseInfo;

Buffer: PChar;

OldErrorMode: Cardinal;

RootItemIDList, ItemIDList: PItemIDList;

ShellMalloc: IMalloc;

IDesktopFolder: IShellFolder;

Eaten, Flags: LongWord;

begin

Result := False;

if not DirectoryExists(Directory) then

Directory := ”;

FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);

if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then

begin

Buffer := ShellMalloc.Alloc(MAX_PATH);

try

RootItemIDList := nil;

if Root <> ” then

begin

SHGetDesktopFolder(IDesktopFolder);

IDesktopFolder.ParseDisplayName(Application.Handle, nil, POleStr(Root), Eaten, RootItemIDList, Flags);

end;

with BrowseInfo do

begin

hwndOwner := Application.Handle;

pidlRoot := RootItemIDList;

pszDisplayName := Buffer;

lpszTitle := PChar(Caption);

ulFlags := BIF_RETURNONLYFSDIRS or BIF_NEWDIALOGSTYLE;

if Directory <> ” then

begin

lpfn := SelectDirCB;

lParam := Integer(PChar(Directory));

end;

end;

WindowList := DisableTaskWindows(0);

OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);

try

ItemIDList := ShBrowseForFolder(BrowseInfo);

finally

SetErrorMode(OldErrorMode);

EnableTaskWindows(WindowList);

end;

Result := ItemIDList <> nil;

if Result then

begin

ShGetPathFromIDList(ItemIDList, Buffer);

ShellMalloc.Free(ItemIDList);

Directory := Buffer;

end;

finally

ShellMalloc.Free(Buffer);

end;

end;

end;

说实话该对话框应该被淘汰了,最新的文件夹选择对话框代码量少,用户界面也非常友好。

Delphi11 使用windows新版的文件夹选择对话框

代码如下:

with TFileOpenDialog.Create(nil) do

try

Options := [fdoPickFolders];

if Execute then

begin

showmessage(filename);

end;

finally

Free;

end;

做个笔记以防忘记。

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至81118366@qq.com举报,一经查实,本站将立刻删除。发布者:简知小编,转载请注明出处:https://www.jianzixun.com/71764.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
软文友链广告合作联系站长qq81118366