2012-06-12 22 views
4

我正在使用FireMonkey並希望用戶使用TFileOpenDialog提供的接口(我發現SelectDirectory接口過時最多 - 即使使用sdNewUI選項)也選擇一個目錄。FireMonkey中的TFileOpenDialog應用程序

TFileOpenDialog with [fdoPickFolders] option

首先,它是不好的做法,包括VCL.Dialogs單元的FireMonkey應用程序(使用TFileOpenDialog)?其次,這仍然只適用於Windows Vista及更高版本。這是檢查兼容Windows版本的正確方法嗎?

{IFDEF WIN32 or WIN64} 
    if Win32MajorVersion >= 6 then 
    // Create TOpenFileDialog with fdoPickFolders option 
+0

你的Vista測試了罰款。就個人而言,我不會打擾'TFileOpenDialog'並直接使用'IFileDialog'。 –

+0

嗯......我如何做到這一點與fdoPickFolders選項,是不是IFileDialog只是一個標準的TOpenDialog/TSaveDialog接口,或我缺少的東西? –

+1

不,「IFileDialog」是所有形式的Vista的文件對話框。其他一切都是遺產。調用'IFileDialog.SetOptions'傳遞'FOS_PICKFOLDERS'。 –

回答

2

以供將來參考,使用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; 
+0

這裏缺少錯誤處理令人失望 –

+0

它也不支持庫.. –

相關問題