К основному контенту

Delphi. Диалог выбора каталога с полем ввода и кнопкой "Создать"

Нужен именно такой диалог, как на рисунке выше? Тогда делаем следующее:

Подключаем в uses модуль ShlObj

Затем добавляем в кнопку вот это:
procedure TForm1.Button1Click(Sender: TObject);
var
  TitleName: string;
  lpItemID: PItemIDList;
  BrowseInfo: TBrowseInfo;
  DisplayName: array[0..MAX_PATH] of char;
  TempPath: array[0..MAX_PATH] of char;
begin
  FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
  BrowseInfo.hwndOwner := Form1.Handle;
  BrowseInfo.pszDisplayName := @DisplayName;
  TitleName := 'Please specify a directory';
  BrowseInfo.lpszTitle := PChar(TitleName);
  BrowseInfo.ulFlags :=  BIF_EDITBOX;
  lpItemID := SHBrowseForFolder(BrowseInfo);
  if lpItemId <> nil then
  begin
    SHGetPathFromIDList(lpItemID, TempPath);
    ShowMessage(TempPath);
    GlobalFreePtr(lpItemID);
  end;
end;

Обратите внимание - я выделил красным несколько важных вещей:
TitleName = 'Здесь указываем текст, который будет написан в верхней части диалога'
BrowseInfo.ulFlags := Флаги, отвечающие за то, как будет отображаться диалог (см. ниже)
TempPath - Переменная, в которую записывается путь к выбранной папке

Теперь перейдем к флагам:

Флаг BIF_EDITBOX
Диалог с полем ввода в верхней части окна, куда можно вставить полный путь к папке




Флаг BIF_RETURNONLYFSDIRS
Диалог с блокировкой кнопки OK, если выбранная папка не является частью файловой системы (например "Этот компьютер")




Флаг BIF_USENEWUI
Здесь поле ввода уже располагается внизу. Есть возможность создать новую папку (отключается, если выбран "Этот компьютер" или аналогичный раздел не из файловой системы). Можно менять размер окна. Но у данного диалога есть и недостаток (имхо): если нажать на папку, она автоматически раскрывает подкаталоги, что может вызвать подвисание, если подкаталогов слишком много. В случае с флагом BIF_EDITBOX папка выделяется, но не раскрывается. Поэтому, если мы заранее знаем содержимое выбранной папки, данного флага будет достаточно, чтобы получить путь к папке в переменную.




Еще команды вы найдете здесь:


Ну, и еще немного:
Если Вас устраивает такой диалог, как у флага BIF_RETURNONLYFSDIRS,


то есть более короткое решение:

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  if SelectDirectory('Please specify a directory', 'rfdesktop', s) then
  begin
    ShowMessage(s); //выводим сообщение с содержимым переменной s
  end;
end;
Здесь, как вы видите, путь записывается в переменную s, а rfDesktop позволяет показывать весь список, начиная от раздела "Рабочий стол", а не какого-то конкретного диска или папки.



Ну, а для олдскульщиков есть решение, чтобы показать диалог в стиле Win 3.1:



procedure TForm1.Button1Click(Sender: TObject);
var
  options : TSelectDirOpts;
  DirPath: string;
begin
  DirPath := 'C:\';
  if SelectDirectory(DirPath, options, 0) then
  ShowMessage(DirPath);
end;


Комментарии

Самое просматриваемое

Где Vegas Pro хранит автосохраненные проекты?

12 -ая версия, например, хранит их здесь: %USERPROFILE%\AppData\Local\Sony\Vegas Pro\12.0 16 -ая хранит проекты по тому же пути, только немного в другой папке: %USERPROFILE%\AppData\Local\VEGAS Pro\16.0 

Нет доступа к рабочей группе "WORKGROUP". Ошибка "Нет доступа к Workgroup. Возможно, у вас нет прав на использование этого сетевого ресурса".

Ситуация: есть рабочая группа " WORKGROUP " и три компьютера в сети, объединенные через роутер. На одном из них установлена Windows XP Professional SP3 , на другом - Windows 10 SL . В один прекрасный день, попытавшись получить с XP-шного компьютера доступ к компьютеру с Windows 10 , я даже не смог отобразить компьютеры рабочей группы (т. е. увидеть все компьютеры в сети). Вместо этого красовалось сообщение об ошибке, гласящее: "Нет доступа к Workgroup. Возможно у вас нет прав на использование этого сетевого ресурса...Обратитесь к системному администратору. Служба не запущена". Оказалось, что проблема главным образом заключалась в компьютере с Windows 10 : ошибка выскакивала при попытке отобразить в списке именно его, и как следствие - не открывалась рабочая группа. РЕШЕНИЕ (во всяком случае, мне это помогло) На компьютере с  Windows 10 заходим в Службы ( Win + R > services.msc ) Находим службу "Браузер компьютеров" и останавливаем

Сеть отсутствует или не запущена. Решение

Запустить командную строку от имени администратора: Пуск > в строке поиска вписать cmd , нажать на иконку правой кнопкой мыши выбрать « Запустить от имени администратора ». В командную строку скопируйте sc config mrxsmb10 start= demand и нажмите Enter . Нажимаем Win+R и вводим services.msc Находим службу “ Рабочая станция ” и нажав правой кнопкой мыши выбираем пункт « Запустить ». Примечание: служба не запустится , если не выполнить пункт 2 . Запуск службы лучше поставить на " Автоматически ". Вот и все. Источник:  http://studenthelper.hol.es/%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0/%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B-%D1%81%D0%B5%D1%82%D1%8C-%D0%BE%D1%82%D1%81%D1%83%D1%82%D1%81%D1%82%D0%B2%D1%83%D0%B5%D1%82-%D0%B8/

Как удалить виртуальный дисковод, созданный UltraISO из "Проводника"?

Не смотря на то, что в Windows 10 уже давно есть поддержка открытия образов дисков ( Открыть с помощью > Проводник ), некоторые типы образов она не открывает (например, образы с играми для  PS1 ). Поэтому приходится прибегать к использованию сторонних программ, популярной из которых считается UltraISO (благодаря простому интерфейсу, малому размеру и нетребовательности к ресурсам ПК). Но даже у таких простых простых программ порой случаются глюки. И проблема чаще всего связана с виртуальным приводом. Проблема В моем же случае, у меня на компьютере "застрял" виртуальный дисковод, который занял букву временно отключенного внешнего HDD . Все бы ничего, но на нем ( HDD ) располагались видеофайлы материала, который я в данный момент монтирую, и на которые (с учетом исходной буквы диска) прописаны ссылки в файле проекта монтажки. Поэтому, самым простым вариантом на мой взгляд было вернуть внешнему диску исходную букву (которую занял виртуальный привод), а виртуальному просто на

FL Studio. Не перетаскиваются файлы

Зайти в Свойства > Совместимость > Изменить параметры для всех пользователей , снять галочку "Выполнять от имени Администратора" > OK , снять еще одну (уже разблокированную) галочку "Выполнять от имени Администратора" > OK .