как загрузить System Image List

Программирование на Visual Basic for Applications
X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

как загрузить System Image List

Сообщение X-BOND » 23.08.2005 (Вт) 16:14

Имеем TreeView, в который загружаем определенную папку со всеми субпапками и файлами. И каждый тип файла должен иметь свою иконку, прописанную доктором... тьфу, системой. Так вот и появилась мысля загнать в обычный ImageList все иконки, ассоциированные с конкретным расширением файла. У меня есть пример на VB, как можно это реализовать с помощью PictureBox, и то криво. Но в VBA PictureBox-а, насколько я знаю, нет в принципе. А может можно "Дереву" сразу задать ссылку на System Image List (возможно ли это вообще) ?
Итак, что делать?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2005 (Ср) 3:06

Можно, сообщением TVM_SETIMAGELIST.
Сам Image list см. в Кирпичах.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 24.08.2005 (Ср) 11:50

Так, с этого места поподробнее. Сообщение посылать через SendMessage? а как узнать hWnd чтобы послать сообщение? И что ставить на lParam?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2005 (Ср) 12:11

А что, у treeview не проперти hWnd?..
А справка вот.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 24.08.2005 (Ср) 12:20

GSerg писал(а):А что, у treeview не проперти hWnd?..

Звыняюсь :oops:. Не соизволил проверить. Привык, что в VBA хендлы редкость.

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 24.08.2005 (Ср) 13:15

Мы немного от темы отошли. Привязать ImageList к дереву можно без всяких SendMessage: Set TreeView1.ImageList = ImageList1
А мне нужно получить все иконки из System Image List, в чем и заключался сабж первого поста. Или я чего не доглядел в примере кирпича?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2005 (Ср) 13:18

Что такое System Image List?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 24.08.2005 (Ср) 13:47

это он думает, что такой существует :lol:

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 24.08.2005 (Ср) 14:55

Существует :) . Может называется немного иначе, но существует.
И хендл можно получить приблизительно так:
hSLI = SHGetFileInfo("c:\", 0&, SHI, Len(SHI), SHGFI_SYSICONINDEX Or SHGFI_SMALLICON)
Вот только как приаттачить к дереву....

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2005 (Ср) 15:13

Интересно...
Получив, пошли sendmessage.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 24.08.2005 (Ср) 15:32

Уже пробовал, не катит, говорит, надо сначала инициализировать ImageList
Call SendMessage(TreeView1.hWnd, TVM_SETIMAGELIST, 0/2, hSLI)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2005 (Ср) 15:39

А после чего он говорит, что надо его инициализировать?
И что такое 0/2?
И как объявлена SendMessage?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 24.08.2005 (Ср) 15:50

Говорит после попытки добавить узел в дерево

0/2 - константы TVSIL_NORMAL и TVSIL_STATE (пробовал обе)

Объявлено как:
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2005 (Ср) 16:04

Тогда как минимум Call SendMessage(TreeView1.hWnd, TVM_SETIMAGELIST, 0, ByVal hSLI)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 24.08.2005 (Ср) 16:27

И так не работает.

Сделал проверку после:
lRet = SendMessage(TreeView.hWnd, TVM_GETIMAGELIST, 0, 0)

при всех раскладах возращает 0
То есть нифига он не аттачит

Если бы перегнать все иконки из системного в обычный имажлист. Но там требуется буфер из PictureBox-а. Как без него можно это сделать?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2005 (Ср) 16:36

Где он там требуется?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 24.08.2005 (Ср) 16:52

То я про другой пример говорил.
Щас буду твой кирпич подробно разгребать...


Вернуться в VBA

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 85

    TopList