Дерево каталогов из Shell32.dll

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Warn
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 08.12.2005 (Чт) 20:34
Откуда: Питер

Дерево каталогов из Shell32.dll

Сообщение Warn » 13.12.2005 (Вт) 15:47

Здравствуйте! Мне нужно заполнить Treeview, как в проводнике. На форумах не по VB :( я прочитал, что это можно сделать либо вручную, либо через Shell32.dll. Как это сделать через Shell32?

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 13.12.2005 (Вт) 20:52

Нужно подключить shell32.dll как ссылку. Там есть несколько объектов. Можно также, наверное вызвать и окно Проводника.

Warn
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 08.12.2005 (Чт) 20:34
Откуда: Питер

Сообщение Warn » 13.12.2005 (Вт) 22:01

Нет, я не это имел ввиду. У меня есть на форме контрол Treeview, и мне нужно заполнить его, как в проводнике винды. А вызвать окно проводника можно и WinExec'ом, и шеллом, и чертом в ступе.
Тут копал инет-ведро с инфой-наткнулся на такую цитату:
дерево надо строить начиная не с файлов, а с рабочего стола, IShellFolder к которому получаешь через SHGetDesktopFolder, из IShellFolder можно получить (используя IShellFolder::GetUIObjectOf) IExtractIcon который, путь к исконке и саму иконку. А также из IShellFolder'а перечисляешь всех потомков от Desktop'а. Очень удобно и быстро стоиться дерево (сохраняй указатели на IShellFolder в ItemData), методы позволяют узнать есть ли у папки подпапки и ты можешь добавить в дерево временные подэлементы, кажем с названием '*'( чтобы были "плюсики" у папок), когда юзер щелкает на папку ты проверяешь подэлемент если он '*', то удаляешь временный подэлемент и заполнаяешь потомков, иначе потомки уже заполнены.


P.S. кстати узнать РЕАЛЬНЫЕ путьи к папкам типа MyDocuments, Desktop и подобным можно использовать
SHGetFolderPath
SHGetSpecialFolderLocation
SHGetSpecialFolderPath


Вот только написано это на таком кривом языке, что я в объяснение въехать не могу. Помогите, пожалуйста, заюзать вызовы из цитаты.
Да, форум был по С++

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 13.12.2005 (Вт) 23:24

Для Листвья:

Public ff As Shell32.Folder
Private ws As New Shell32.Shell

...

Dim f As Shell32.FolderItem
dim Litem as listitem

'это для корзины
Set ff = ws.NameSpace(ssfBITBUCKET)



For Each f In ff.Items

Set Litem = ListView1.Listitems.Add

Litem.Text = f.Name

next

Warn
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 08.12.2005 (Чт) 20:34
Откуда: Питер

Сообщение Warn » 13.12.2005 (Вт) 23:31

Спасибо за код, разбираюсь.

Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

Сообщение Naked » 14.12.2005 (Ср) 3:04



Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, SemrushBot и гости: 166

    TopList