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

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;


Комментарии

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

Укрощаем глюки в Sony Vegas Pro

Сегодня мы поговорим об укрощении глюков в монтажке Sony Vegas и какие действия не стоит делать, чтобы не столкнуться с вылетом программы. Делать все мы будем на примере версии  Sony Vegas 12.0 (Build 770) (x64) . Самое главное и основное - возьмите за правило нажимать Ctrl+S (т.е. сохранять проект)  перед каждым сложным действием . "Сложное" действие определить очень легко: оно более затратно по времени, чем другие. Например, одно дело, когда вы ставите стандартный плагин Brightness and Contrast , и совсем другое, когда вы ставите что-то от NewBlue или Magic Bullet - он ставится дольше. В этот момент "ожидания" обычно и случаются глюки , поэтому лучше заранее сохранить проект. Конечно, в Vegas Pro есть автосохранение, но его периодичность может стать... редкой относительно скорости монтажника, из-за чего могут не сохраниться целые монтажные куски. Кстати, интервал автосохранения можно регулировать: зажмите клавишу Shift и перейдите в меню " Optio...

Как вернуть нормальную Русскую клавиатуру на телефоне Samsung?

  Решение Если Ваша клавиатура стала выглядеть как на картинке справа👉   (а точнее - по аналогии с клавиатурой кнопочного телефона), сделайте следующее: Откройте " Настройки ".⚙ Перейдите в Общие настройки > Язык и ввод > Экранная клавиатура > Клавиатура Samsung > Языки и типы > Русский . Выберите из списка " Клавиатура Qwerty ". Все. 😉

В системе отображения конечных точек не осталось доступных конечных точек

Несколько способов решения этой проблемы: ПЕРВЫЙ:  Необходимо запустить службу  Брандмауэра Windows.  Панель Управления → Система и безопасность → Администрирование → Службы → Брандмауэр Windows.  Нажмите на неё правой кнопкой мыши и выберите —  Запустить . ВТОРОЙ:  Измените настройки в  Панели управления → Брандмауэр :     Выключить,  если не поможет, то  Включить. ТРЕТИЙ:  Дайте возможность самой системе, устранить указанную ошибку, в автоматическом режиме.  Центр поддержки Windows → Устранение неполадок → Использование принтера. Источник:   http://okolokompa.ru/%D0%B2-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B5-%D0%BE%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D1%85-%D1%82%D0%BE%D1%87%D0%B5%D0%BA/

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

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

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

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