C++ Builder Tips


フォルダ選択ダイアログを表示する


フォルダ選択ダイアログを表示するには、SHbrowseForFolder()関数を使います。
以下の関数はRootフォルダを指定することができます。
RootをNULLにすれば、MyComputerがルートになります。

AnsiString TForm1::SelectFolder(HWND Owner, AnsiString Root)
{
 AnsiString s;
 IMalloc *m;
 if(SUCCEEDED(SHGetMalloc(&m)))
 {
  brOWSEINFO b;
  LPITEMIdlIST pidl = NULL;
  char path[MAX_PATH];

  b.hwndOwner = Owner;
  if(Root != "")pidl=GetPIdl(Root);
  b.pidlRoot = pidl;
  b.pszDisplayName = path;
  b.lpszTitle = "フォルダを選択してください";
  b.ulFlags = 0;
  b.lpfn = NULL;
  b.lParam=0;
  b.iImage=0;

  LPITEMIdlIST id=SHbrowseForFolder(&b);
  if(id)
  {
   SHGetPathFromIdlist(id,path);
   s=path;
   m->Free(id);
  }
  m->Release();
 }
 return s;
}

LPITEMIdlIST TForm1::GetPIdl(AnsiString Dir)
{
 LPSHELLFOLDER pshf = NULL;
 LPITEMIdlIST pidl = NULL;

 if(SUCCEEDED(SHGetDesktopFolder(&pshf)))
 {
  wchar_t lpszDisplayName[MAX_PATH];
  StringToWideChar(Dir, lpszDisplayName, MAX_PATH);
  if(!SUCCEEDED(pshf->ParseDisplayName(NULL, NULL, lpszDisplayName, NULL, &pidl, NULL)))
   pidl=NULL;
  pshf->Release();
 }
 return pidl;
}


目次に戻る
Copyright(c) 2008 WoodenSoldier Software