|
|
||||||
Окно выбора директории (папки)30.08.2013, 10:32. Показов 19693. Ответов 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 компонент для выбора файла из директории Стандартный объект выбора директории или файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|