Есть два варианта процедуры
SelectDirectory, в зависимости какой используешь, будут разные графические интерфейсы, да и код у них разный, можешь посмотреть исходник FileCtrl. Но вот кнопку создания новой папки туда не добавить. Поэтому процедуру вызова диалога надо писать самому, добавив необходимый флаг:
Код:
function ShowChooseDirDialog: String;
const
TitleName = 'Укажите папку назначения'; // это подсказка
var
lpItemID: PItemIDList;
BrowseInfo: TBrowseInfo;
DisplayName: array[0..MAX_PATH] of Char;
TempPath: array[0..MAX_PATH] of Char;
begin
Result := '';
FillChar(BrowseInfo, sizeof(TBrowseInfo), 0);
//Здесь нужно использовать именно Application.Handle
BrowseInfo.hwndOwner := Application.Handle;
BrowseInfo.pszDisplayName := @DisplayName;
BrowseInfo.lpszTitle := @TitleName[1];
// NEWDIALOGSTYLE - будет добавлена кнопка "Создать папку"
BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS or BIF_NEWDIALOGSTYLE;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemID <> nil then
begin
SHGetPathFromIDList(lpItemID, TempPath);
Result := String(TempPath);
GlobalFreePtr(lpItemID);
end;
end;