Implement a Win32 look and feel "Browse for Folder" directory picker (Views: 28)
Problem/Question/Abstract: I'm looking for code that will let me implement a Win32 look and feel "Browse for Folder" directory picker. Like the one used in Project Options - > Directories/ Conditionals interface. Answer: procedure TMainForm.BrowseFolderActionExecute(Sender: TObject); var pidl, pidlSelected: PItemIDList; bi: TBrowseInfo; szDirName: array[0..260] of AnsiChar; begin {Get the root PIDL of the network neighborhood tree} if SHGetSpecialFolderLocation(Handle, CSIDL_DESKTOP, pidl) = NOERROR then begin {Populate a BROWSEINFO structure} bi.hwndOwner := Handle; bi.pidlRoot := pidl; bi.pszDisplayName := szDirName; bi.lpszTitle := 'Select directory'; bi.ulFlags := BIF_RETURNONLYFSDIRS; bi.lpfn := nil; bi.lParam := 0; bi.iImage := -1; {Display the "Browse For Folder" dialog box} pidlSelected := SHBrowseForFolder(bi); {NULL indicates that Cancel was selected from the dialog box} if pidlSelected < > nil then begin SHGetPathFromIDList(pidlSelected, szDirName); ShowMessage(szDirName); {Release the PIDL of the computer name} CoTaskMemFree(pidlSelected); end; {Release the PIDL of the network neighborhood tree} CoTaskMemFree(pidl); end; end; |