|
|
||||||
Окно выбора директории (папки)30.08.2013, 10:32. Показов 19650. Ответов 17
Метки нет (Все метки)
Всем привет!
Давно ищу в интернете нормальное диалоговое окно выбора директории (по типа того что предоставляет CommonDialog для выбора файлов). Кстати на VBA такая вещь присутствует! Вот пример на VBA : Кликните здесь для просмотра всего текста
0
|
||||||
| 30.08.2013, 10:32 | |
|
Ответы с готовыми решениями:
17
Как открыть окно для выбора папки? Стандартный диалог выбора директории
|
|
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
|
|
| 30.08.2013, 11:04 | |
|
Посмотрите -
3
|
|
|
|
|
| 30.08.2013, 11:28 [ТС] | |
|
Апострофф,
Конечно лучше чем то, что находится в интернете. Но у данного метода выбора папки есть существенные минусы: 1) Неудобство выбора папки из-за древовидного отображения 2) Невозможно пройти в скрытые папки. Вот идеальный вариант диалогового окна:
0
|
|
|
|
|
| 30.08.2013, 12:59 [ТС] | |
|
Catstail,
если бы вы посмотрели спойлер в первом посте, то увидели бы что там вызов такого диалога реализуется с помощью встроенных ресурсов офисного приложения : With Application.FileDialog( ...
0
|
|
| 30.08.2013, 15:49 | |
|
Не по теме: Bati4eli, завел в заблуждение. Там каламбур Application.FileDialog вместе с API-функциями :jokingly:
0
|
|
|
|
|
| 30.08.2013, 16:22 [ТС] | |
|
Dragokas,
если честно я в "тупую" копировал по-быстрому часть кода из модуля.. и даже не смотрел используются ли эти APi функции. Так что извеняюсь, если ввел в заблуждение. Просто выложил как пример того, чего хотелось бы видеть в своей проге на VB. Кстати как-то совсем давно .. я нашел в интернете исходник диалогового окна выбора директорий или файла. Там использовалась куча модулей, классов и выглядило окно один в один как виндовское (даже панелька "избранное" работала).. но поскольку я тогда был абсолютным нубом в вопросах программирования и не понимал всю ценность попавшего мне в руки VB проекта .. я бессердечно удалил это творение
0
|
|
|
|
|
| 30.08.2013, 16:35 | |
|
Если кого-нибудь вдохновит:
Из всего, что нашел быстрым поиском это: Кликните здесь для просмотра всего текста
SHBrowseForFolder is the CRAPPIEST AND MOST ANNOYING system dialog in all Windows and should be shot!
It's a nightmare to navigate especially if you have many folders, you can't type in a path, no Back or Up buttons, can't create new folder. Also it always starts from the root of the file system, and often freezes while it enumerates all drives and shell extensions to display their icons. It's really hard to get it to start from another folder. The few programs I've seen doing it do it by manually unfolding the tree view. That's said, here is another solution ![]() Step 1: Initialize your OPENFILENAME structure with the parameters you want - title, initial folder, etc. Use a weird file mask - for example "Folders Only\0zzzzzzzzz.zzzzzzzzzzzzzzzzzzzzzz\0 ". This will filter out any files and will leave in only the folders. Step 2: Create a hook procedure. Inside it trap the WM_INITDIALOG message and: Hide controls stc2, cmb1 and edt1 with the CDM_HIDECONTROL message Change the text of stc3 from "File name" to "Folder name" with the CDM_SETCONTROLTEXT message Subclass the dialog Note that the dialog is the parent of the hwnd you get in the hook procedure. stc2, cmb1, etc. are child of that dialog (the control ids for them are defined in Dlgs.h) Step 3: In the subclass procedure trap the WM_COMMAND for IDOK and: if (uMsg==WM_COMMAND && HIWORD(wParam)==BN_CLICKED && LOWORD(wParam)==IDOK) { HWND list=GetDlgItem(GetDlgItem(hWnd,lst2),1) ; // the listview control if (list && ListView_GetSelectedCount(list)==0) { SendMessage(hWnd,CDM_GETFOLDERPATH,_MAX_ PATH,(LPARAM)g_Path); EndDialog(hWnd,IDOK); } } If no items (folders) are selected and the user pressed IDOK, then he wants to select the current folder. So just get the current folder with CDM_GETFOLDERPATH into a global variable and close the dialog. Step 4: When GetOpenFileName returns with TRUE the selected path will be in g_Path. Ivo И код реализации на C++ (не очень то простой) (работу не проверял). Мож кому интересно - в личку.
0
|
|
|
Супер-модератор
|
||||||
| 30.08.2013, 16:57 | ||||||
|
Вот этот код пойдет? Он будет работать и в VB6.
2
|
||||||
|
44 / 44 / 3
Регистрация: 18.12.2011
Сообщений: 577
|
|
| 31.08.2013, 10:13 | |
|
Апострофф,
Не по теме: Не по теме, как использовать спойлер в своих приложениях?)
0
|
|
|
Модератор
|
||||||||||||||||
| 31.08.2013, 15:58 | ||||||||||||||||
Сообщение было отмечено как решение
Решение
Можно модифицировать стандартный диалог открытия файла.
Что-то типа этого: Кликните здесь для просмотра всего текста
Модуль:
Или для стандартного диалога открытия папки, только без множественного выбора: Кликните здесь для просмотра всего текста
PS.Писал, особо не проверял, так что можно наверное оптимизировать
4
|
||||||||||||||||
|
|
|
| 19.06.2014, 02:26 | |
|
The trick, привет !
А можешь, пожалуйста, написать, как будет для 1-го варианта (мод. GetOpenFileName): - если не выбрано ни одной папки и нажать на кнопку "Pick folder", чтобы выбиралась единственная папка - та, в которой в данный момент открыт диалог.
0
|
|
|
|
|
| 19.06.2014, 23:13 | |
|
Это существенные правки. На лицо оптимизация, центрирование... и другое.
Спасибо. Объединил с предыдущим кодом. Единственное, что - когда нажимаешь кнопку "Перейти в родительскую папку", а затем "Pick Folder", код выбирает дочернюю, а не ту, в которой сейчас находишься.
0
|
|
|
Модератор
|
|
| 02.09.2020, 22:26 | |
|
1
|
|
|
32 / 32 / 0
Регистрация: 05.11.2020
Сообщений: 102
|
|
| 05.11.2020, 16:00 | |
|
Не смотрел архив, на который ссылается The trick, но поделюсь своим опытом. Я в своих программах использую хранение последней открытой папки в реестре (как и завещал Билли всем разработчикам). Например:
1. Запомнить папку: SaveSetting(MyCopyright, MyApplicaton, "LastFolder", "C:\MyApp\Folder") 'Это можно сделать, например, после выбора файла пользователем (sLastFolder = CommonDialog.InitFolder) 2. Вспомнить папку и загнать её в CommonDialog: sLastFolder = GetSetting(MyCopyright, MyApplicaton, "LastFolder", "") Перед вызовом CommonDialog сделать так: If Len(sLastFolder) > 0 then 'Это я так по простецки проверяю содержимое полученного ключа "LastFolder". Если по уму подойти, то нужно организовать проверку наличия пути к папке, например через FSO или функцию Dir$() CommonDialog.InitFolder = sLastFolder End If 'Ну и потом вызвать метод "ShowOpen" CommonDialog - а '(sLastFolder - переменная типа String)
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 16.11.2023, 20:59 | |
|
Вот супер-классный новый модуль для вызова диалога выбора папки: Готовые решения и полезные коды на Visual Basic 6.0
0
|
|
| 16.11.2023, 20:59 | |
|
Помогаю со студенческими работами здесь
18
Диалоговое окно выбора как папки так и файлов Вызвать стандартный диалог выбора директории Нужен диалог выбора диска (директории), а не файла Activex компонент для выбора файла из директории Стандартный объект выбора директории или файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|