Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удобный выбор папки, Как это сделать? 
:(
    Опции темы
ИгнатьевАлексей
Дата 28.7.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



Друзья! Подскажите пожалуйста!

Надо на форме получать путь к папке в текстовом виде. Не могу найти ничего подходящего и готового. Т.е. надо нечто подобное CommonDialog\ShowOpen, только для выбора папок, а не файлов.

Заранее благодарен! 


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
mihanik
Дата 28.7.2006, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



ИгнатьевАлексей,  я в таких случаях обычно использую DirListBox совместно с DriveListBox.

При необходимости выношу их на отдельную формочку...

Кода там требуется, ну... Строк 5. Не больше.

Если хочешь, дам примерчик...

Добавлено @ 12:32 
Короче так...

На форму бросаешь DirListBox  и DriveListBox

Пишешь код события изменения DriveListBox для того, чтобы согласовать оба элемента.

Код

Option Explicit

Private Sub Drive1_Change()
    Dir1.Path = Drive1.Drive
End Sub


А потом обрабатываешь событие даблклик по DirListBox  и берёшь от него свойство .path
Это и будет полный путь к твоеё папке...

Добавлено @ 12:34 
а....
Замечание, если в DriveListBox выберешь дискету, а дискеты не будет, то прога вылетит, т.е. нужен обработчик ошибок...

Подходит идея?

Добавлено @ 12:36 
А можно использовать стандартный диалог ShowOpen, но немного через...
Гм... smile 
В приличном обществе о таком не говорят... smile   

Это сообщение отредактировал(а) mihanik - 28.7.2006, 12:37


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
ИгнатьевАлексей
Дата 28.7.2006, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



Спасибо, приятель!
Исчерпывающе! 

Да вот я думал, что человечество уже сделало это. Не потому, что лень 5 строк кода написать, а потому, что стандартные вещи удобнее, как правило и элегантнее, не так ли? 


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
mihanik
Дата 28.7.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Цитата(ИгнатьевАлексей @  28.7.2006,  12:46 Найти цитируемый пост)
стандартные вещи удобнее, как правило и элегантнее, не так ли? 

Это так...
Сейчас ещё пошукаю по книжкам.
Может, найду, что-нибудь...  smile  


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
ИгнатьевАлексей
Дата 28.7.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



Передо мной по кругу лежат 5 книжек. Обзорно просмотрел - кроме того, о чем ты мне любезно рассказал, не нашел! Из чего делаю вывод, что если и есть что либо подобное, то не в составе базовых вещей. Хотя хочется верить, что это не так.  smile  


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
ИгнатьевАлексей
Дата 28.7.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



Ой беда!
 Я и забыл, что пишу это в VBA, а там мне что-то это не найти! Может же такое быть? 


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
mihanik
Дата 28.7.2006, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Не расстраивайся!!!

Я знаешь как сделал однажды в Excel'e?
Создал форму, разместил на ней CommonDialog и пользовался им спокойно.
Например так...

Код

Private Sub cmdSaveBook_Click()
Dim strFileName As String
Dim strFilePath As String

    ' Выбираем файл, в котором храниться заполненные заявки
    strFilePath = ThisWorkbook.Path + "\Заполненные заявки"
    
On Error GoTo CancelSave

    ChDir strFilePath

    frmMain.CommonDialog1.CancelError = True
    frmMain.CommonDialog1.Filter = "Файлы заявок |*.xls"
    frmMain.CommonDialog1.InitDir = strFilePath
    frmMain.CommonDialog1.Flags = cdlOFNFileMustExist + cdlOFNLongNames
    frmMain.CommonDialog1.FileName = "Заявка " + CStr(Format(Date, "ddmmyy"))
    frmMain.CommonDialog1.ShowSave
    strFileName = frmMain.CommonDialog1.FileName

    ActiveWorkbook.SaveAs FileName:= _
        strFileName, FileFormat:=xlNormal _
        , Password:="VelvetSweatshop", WriteResPassword:="", ReadOnlyRecommended _
        :=False, CreateBackup:=False

CancelSave:

End Sub


А кто тебе мешает создать форму?  smile

Добавлено @ 14:18 
Кроме того!!!

На форме ты же можешь и DirListBox совместно с DriveListBox разместить...
 


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Dexx
  Дата 28.7.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 13.6.2005

Репутация: 5
Всего: 7



Функция SHBrowseForFolder

Описание : Выводит на экран диалоговое окно ' Выбор папки'.
Операционная система : Windows NT 4.0 или выше; Windows 95 или выше
Библиотека : Shell32.dll

Код

Private Type BrowseInfo
    hWndOwner As Long
    pIDLRoot As Long
    pszDisplayName As Long
    lpszTitle As Long
    ulFlags As Long
    lpfnCallback As Long
    lParam As Long
    iImage As Long
End Type

Const BIF_RETURNONLYFSDIRS = 1
Const MAX_PATH = 260

Private Declare Sub CoTaskMemFree Lib "ole32.dll" _
            (ByVal hMem As Long)

Private Declare Function lstrcat Lib "kernel32" _
            Alias "lstrcatA" _
            (ByVal lpString1 As String, _
            ByVal lpString2 As String) As Long

Private Declare Function SHBrowseForFolder Lib "shell32" _
            (lpbi As BrowseInfo) As Long

Private Declare Function SHGetPathFromIDList Lib "shell32" _
            (ByVal pidList As Long, _
            ByVal lpBuffer As String) As Long

Private Sub Form_Load()
    Dim iNull As Integer, lpIDList As Long, lResult As Long
    Dim sPath As String, udtBI As BrowseInfo

    With udtBI
        .hWndOwner = Me.hWnd
        .lpszTitle = lstrcat("C:\", "")
        .ulFlags = BIF_RETURNONLYFSDIRS
    End With

    'Выводим на экран стандартный диалог 'Выбор папки'
    lpIDList = SHBrowseForFolder(udtBI)
    If lpIDList Then
        sPath = String$(MAX_PATH, 0)
        'Получаем путь из IDList
        SHGetPathFromIDList lpIDList, sPath
        'Освобождаем блок памяти
        CoTaskMemFree lpIDList
        iNull = InStr(sPath, vbNullChar)
        If iNull Then
            sPath = Left$(sPath, iNull - 1)
        End If
    End If

    MsgBox sPath
End Sub

 


Вот так и не важно VB  или VBA 

Это сообщение отредактировал(а) Dexx - 28.7.2006, 14:35


--------------------

PM   Вверх
mihanik
Дата 28.7.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Dexx!!!

О!

Классно!!!
Думаю, что ИгнатьевАлексей, это понравится...
 smile  


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
ИгнатьевАлексей
Дата 28.7.2006, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



Цитата

Классно!!!
Думаю, что ИгнатьевАлексей, это понравится...


Понравилось, хотя и заморочно.


Dexx
Вопросик по коду, если позволите. 
Код

'Освобождаем блок памяти
        CoTaskMemFree lpIDList


Зачем это делается? Ведь это переменная типа Long, или не так просто? Почему к ней такое особое внимание?



mihanik

Цитата

А кто тебе мешает создать форму? 


Вот и проблема в этом, что в VBA я не нашел таких компонентов для формы, а в VB они есть. 
Или ты имеешь в виду создать форму в VB, а не в VBA? 


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
mihanik
Дата 28.7.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Цитата(ИгнатьевАлексей @  28.7.2006,  16:08 Найти цитируемый пост)
Вот и проблема в этом, что в VBA я не нашел таких компонентов для формы, а в VB они есть. 


Покопайся среди Additional Controls.
(Правой кнопкой по тулбоксу )

Там наверняка должно быть что-нибудь подобное...

Сейчас копаться некогда!!!
Убегаю с работы!!!
Завтра или в понедельник посмотрю... 


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Akina
Дата 28.7.2006, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(mihanik @  28.7.2006,  13:26 Найти цитируемый пост)
можно использовать стандартный диалог ShowOpen, но немного через...

Цитата(ИгнатьевАлексей @  28.7.2006,  17:08 Найти цитируемый пост)
Понравилось, хотя и заморочно.

Не заморочно, а правильно. Если очень хочется остаться в рамках регистрированных компонентов - то надо использовать CommonDialuog.ShowOpen - однако он предназначен для выбора файла, а не каталога. Что же до создания собственной формы с DriveListBox/DirListBox - вот это действительно путь через то самое место, и нужно очень много причин для выбора ТАКОГО пути.

Сорри, не мог не высказаться. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Дмит
Дата 28.7.2006, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 21.4.2006
Где: г.Волгоград

Репутация: 1
Всего: 9



В Excel 2000 можно так:
Код

With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Выберите папку:"
.Show
If .SelectedItems.Count > 0 Then
str = .SelectedItems(1)
End If
End With 
 

Это сообщение отредактировал(а) cardinal - 29.7.2006, 01:29
PM MAIL WWW   Вверх
cardinal
Дата 29.7.2006, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99




M
cardinal
Дмит, пользуйся тегами кода!

 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
ИгнатьевАлексей
Дата 29.7.2006, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



mihanik, да не надо уже, спасибо! Дмит предложил классную вещь, как мне кажется, я в книжке ее не заметил!



Akina, скажи, пожалуйста, а то, что Дмит предложил по какой-то причине хуже, чем SHBrowseForFolder?
 


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0930 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.