以供將來參考,使用IFileDialog的創建一個Windows Vista和文件夾對話框上面:
uses
ShlObj, ActiveX;
...
var
FolderDialog : IFileDialog;
hr: HRESULT;
IResult: IShellItem;
FileName: PChar;
Settings: DWORD;
begin
if Win32MajorVersion >= 6 then
begin
hr := CoCreateInstance(CLSID_FileOpenDialog,
nil,
CLSCTX_INPROC_SERVER,
IFileDialog,
FolderDialog);
if hr = S_OK then
begin
FolderDialog.GetOptions(Settings);
FolderDialog.SetOptions(Settings or FOS_PICKFOLDERS);
FolderDialog.GetOptions(Settings);
FolderDialog.SetOptions(Settings or FOS_FORCEFILESYSTEM);
FolderDialog.SetOkButtonLabel(PChar('Select'));
FolderDialog.SetTitle(PChar('Select a Directory'));
hr := FolderDialog.Show(Handle);
if hr = S_OK then
begin
hr := FolderDialog.GetResult(IResult);
if hr = S_OK then
begin
IResult.GetDisplayName(SIGDN_FILESYSPATH,FileName);
ConfigPathEdit.Text := FileName;
end;
end;
end;
end;
end;
你的Vista測試了罰款。就個人而言,我不會打擾'TFileOpenDialog'並直接使用'IFileDialog'。 –
嗯......我如何做到這一點與fdoPickFolders選項,是不是IFileDialog只是一個標準的TOpenDialog/TSaveDialog接口,或我缺少的東西? –
不,「IFileDialog」是所有形式的Vista的文件對話框。其他一切都是遺產。調用'IFileDialog.SetOptions'傳遞'FOS_PICKFOLDERS'。 –