|
|
||||||
Окно выбора директории (папки)30.08.2013, 10:32. Показов 19859. Ответов 18
Метки нет (Все метки)
Всем привет!
Давно ищу в интернете нормальное диалоговое окно выбора директории (по типа того что предоставляет CommonDialog для выбора файлов). Кстати на VBA такая вещь присутствует! Вот пример на VBA : Кликните здесь для просмотра всего текста
0
|
||||||
| 30.08.2013, 10:32 | |
|
Ответы с готовыми решениями:
18
Как открыть окно для выбора папки? Стандартный диалог выбора директории
|
|
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,907
|
|
| 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
|
|
|
Испарился
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 16.11.2023, 20:59 | |
|
Вот супер-классный новый модуль для вызова диалога выбора папки: Готовые решения и полезные коды на Visual Basic 6.0
0
|
|
|
|
|
| 25.03.2026, 09:24 | |
|
Catstail, использовал ваш модуль:
1
|
|
| 25.03.2026, 09:24 | |
|
Помогаю со студенческими работами здесь
19
Диалоговое окно выбора как папки так и файлов Вызвать стандартный диалог выбора директории Нужен диалог выбора диска (директории), а не файла Activex компонент для выбора файла из директории Стандартный объект выбора директории или файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|