演示如何调用系统对话框 (演示语言--delphi):
uses
ShlObj, Activex;
procedure TForm1.Button2Click(Sender: TObject);
var
BrowseInfo: TBrowseInfo;
ItemIDList: PItemIDList;
ComputerName: array[0..MAX_PATH] of Char;
Title: string;
WindowList: Pointer;
ShellMalloc: IMalloc;
begin
if Failed(SHGetSpecialFolderLocation(Application.Handle, CSIDL_NETWORK, ItemIDList)) then
raise Exception.Create(‘Unable open browse computer dialog‘);
try
FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
BrowseInfo.hwndOwner := Self.Handle;
BrowseInfo.pidlRoot := ItemIDList;
BrowseInfo.pszDisplayName := ComputerName;
Title := ‘提示标题‘;
BrowseInfo.lpszTitle := PChar(Pointer(Title));
BrowseInfo.ulFlags := BIF_NEWDIALOGSTYLE or BIF_SHAREABLE;
WindowList := DisableTaskWindows(0);
try
SHBrowseForFolder(BrowseInfo);
finally
EnableTaskWindows(WindowList);
end;
//if Result then CompName := ComputerName;
finally
if Succeeded(SHGetMalloc(ShellMalloc)) then
ShellMalloc.Free(ItemIDList);
end;
end;
其中 BrowseInfo.ulFlags 参数可选值和含义如下
BIF_BROWSEFORCOMPUTER
只有当用户
选择“我的电脑”时“确定”按钮才有效,计算机可以是网络的
BIF_BROWSEFORPRINTER
当然是只能选择打印机
允许最终用户选择一特定打印机。当传递该常量时,对话框有如下行为:
“网络邻居”文件夹在树形控件中被预选。
仅那些包括至少一台打印机的计算机在网络邻居文件夹中显示。
仅当选中树形控件中的一个有效打印机时,OK按钮被激活。
即使BIF_EDITBOX指定时也不显示编辑框。
BIF_BROWSEINCLUDEFILES
Version 4.71.
同时显示文件
BIF_BROWSEINCLUDEURLS
Version 5.0. 可以显示快捷方式(URLs).
BIF_USENEWUI 和 BIF_BROWSEINCLUDEFILES 必须同时被设定,如果没有同时选择这三个标志,那么浏览对话框将拒绝 URLs.
BIF_DONTGOBELOWDOMAIN
域层下的网络文件夹不在树形控件中显示
BIF_EDITBOX
显示一个编辑框,允许用户输入一文件夹名,在编辑框上部显示szEditBoxStaticText中的文本(除非指定BIF_BROWSEFORCOMPUTER 或BIF_BROWSEFORPRINTER)。当最终用户单击OK,SelectDirEx检查是否输入了一个有效文件夹名。如果不是(例如,如果输入了包含无效字符的名称),显示一个错误消息并且对话框不被消除
BIF_NEWDIALOGSTYLE
Version 5.0. 使用新的用户界面.
提供一个大的可调的窗体
其实这个对话框和资源管理器操作差不多了,有右键菜单,下边多了一个新建文件夹按钮
BIF_NONEWFOLDERBUTTON
Version 6.0. 不显示”新建文件夹“按钮.
BIF_NOTRANSLATETARGETS
Version 6.0.
但用户选择了一个快捷方式,将返回它的PIDL
BIF_RETURNFSANCESTORS
如果一个文件系统祖先以外的任何对象被选中时OK按钮被禁用
BIF_RETURNONLYFSDIRS
非文件系统某部分的一个文件夹被选中OK按钮被禁用。.
BIF_SHAREABLE
显示远程共享资源,BIF_NEWDIALOGSTYLE 必须被指定
BIF_STATUSTEXT
在树形控件上部作为态文本显示szTreeControlStaticText
BIF_UAHINT
选定 BIF_NEWDIALOGSTYLE的情况下,增加一个注释.
BIF_USENEWUI
=BIF_EDITBOX | BIF_NEWDIALOGSTYLE
BIF_VALIDATE
如果用户在textbox中输入文件夹无效会发送BFFM_VALIDATEFAILED 消息