2012-06-12 3 views
4

저는 FireMonkey를 사용 중이며 TFileOpenDialog에서 제공하는 인터페이스를 사용하여 디렉토리를 선택하기를 원합니다 (예 : sdNewUI 옵션을 사용하더라도 기껏해야 SelectDirectory 인터페이스가 오래되었습니다).FireMonkey 응용 프로그램의 TFileOpenDialog

TFileOpenDialog with [fdoPickFolders] option

첫째, 그것은 FireMonkey 애플리케이션에서의 (a들을 TFileOpenDialog를 사용하는)을 VCL.Dialogs 장치를 포함하는 나쁜 관행인가?

둘째, Windows Vista 이상에서만 가능합니다. 이 방법이 호환 가능한 Windows 버전을 확인하는 올바른 방법입니까?

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

비스타에 대한 귀하의 테스트가 괜찮습니다. 개인적으로 나는'TFileOpenDialog'에 신경 쓰지 않고 직접'IFileDialog'을 사용합니다. –

+0

Ummm ... fdoPickFolders 옵션으로 어떻게하면 좋을까요, 표준 TOpenDialog/TSaveDialog의 인터페이스 인 IFileDialog가 아니거나 뭔가 빠졌습니까? –

+1

아니요, 'IFileDialog'는 Vista의 모든 파일 형식 대화 상자입니다. 그 밖의 모든 것은 유산입니다. 'FOS_PICKFOLDERS'를 전달하는'IFileDialog.SetOptions'를 호출하십시오. –

답변

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

라이브러리를 지원하지 않습니다. –

관련 문제