powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Что это за "контрол" такой может быть? с избранными папочками
6 сообщений из 6, страница 1 из 1
Что это за "контрол" такой может быть? с избранными папочками
    #36508459
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник


Контрол, который справа как реализовать?
Анализ ресурсов подопытного App дает информацию, что это скорее всего пользовательская штука. Обычное Treview заполненное названиями избранных (назначенных) нескольких папочек.
Щелчок на папочке переводит диалог в соотв. избранную папку.

Но есть одна характерная особенность.
Значки(иконки) папочек (открытая и закрытая) в Treview всегда совпадают с системными значками открытая/закрытая, т.е. на Висте будет выглядеть соотв. иначе (обведено).

Предполагаю что в качестве Icon берутся какие-то стандартные системные иконки из какой-то dll, кот. на каждой системе свои.

Как реализовать? Если это стандартные иконки, допустим я их найду где это, тогда как их загрузить(иконки) из dll в Treeview?
...
Рейтинг: 0 / 0
Что это за "контрол" такой может быть? с избранными папочками
    #36508513
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стандартный ресурс я нашел:
Закрытая папка: SHELL32.DLL,Icon,4
Открытая папка: SHELL32.DLL,Icon,5
(На Висте картинки Open/Close кстати совпадают)
...
Рейтинг: 0 / 0
Что это за "контрол" такой может быть? с избранными папочками
    #36508880
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иными словами, вопрос делится пока на 2:

1) Как впихнуть в TreeView нормальной цветности иконку?
Подозреваю, что копать надо в сторону TVM_INSERTIMAGE, TV_INSERTSTRUCT, TVIF_IMAGE, TVIF_SELECTEDIMAGE,
Или в сторону нормального ImageList через API, если таковой существует
За примеры заранее благодарен, пока особо ничего умного не нашел.

P.S. По нек. соображениям я не хочу создавать Treeview через API (честно никогда через API его не делал, но соображения совсем иные)

2) Как захапать (загрузить) иконку из dll, если "адрес" (имя dll, номер иконки) известен?
...
Рейтинг: 0 / 0
Что это за "контрол" такой может быть? с избранными папочками
    #36509044
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Тут у меня лежат common controls на api. Копать нужно в сторону создания ImageList'а с заданной цветностью.
2)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long
Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long

Private Sub Command1_Click()
Dim hIcon As Long
Dim i As Long
Dim n As Long
    AutoRedraw = True
    ' Получаем число иконок в файле
    n = ExtractIcon(App.hInstance, "c:\windows\system\shell32.dll", - 1 )
    ' Рисуем каждую иконку на форме
    For i =  0  To n -  1 
        hIcon = ExtractIcon(App.hInstance, "c:\windows\system\shell32.dll", i)
        DrawIcon hdc, i *  32 ,  0 , hIcon
    Next
    ' Освобождаем ресурсы
    DestroyIcon hIcon
    Refresh
End Sub
Jah loves you.
...
Рейтинг: 0 / 0
Что это за "контрол" такой может быть? с избранными папочками
    #36509297
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

за пункт 2 сразу спасибо
с ответом на пункт 1 суть уловил
http://msdn.microsoft.com/en-us/library/bb761522(VS.85).aspx

ваш rar безусловно полезен, но с ходу не разобрался
Нашел вот пример по теме:
http://btmtz.mvps.org/listview/
SystemImagelist: How to associate the system imagelist with the VB ListView.
http://btmtz.mvps.org/listview/systemimagelist.zip

Думаю чего нибудь состряпаю.
...
Рейтинг: 0 / 0
Что это за "контрол" такой может быть? с избранными папочками
    #36511902
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ну это дурдом полный.
Пытался создавать ImageList
Код: plaintext
1.
2.
3.
4.
5.
    hIMG = ImageList_Create( 16 ,  16 , ILC_COLOR32,  2 ,  2 )
    hIcon = ExtractIcon(App.hInstance, "shell32.dll",  3 )
    ImageList_AddIcon hIMG, hIcon
    hIcon = ExtractIcon(App.hInstance, "shell32.dll",  4 )
    DrawIcon hdc,  96 ,  32 , hIcon
    SendMessage m_hwndTV, TVM_SETIMAGELIST, TVSIL_NORMAL, ByVal hIMG
Ну во-первых без subclassинга все равно никуда:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Public Function TVWndProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
   Select Case uMsg
    ' ============================================================
    ' Prevent the TreeView from removing our system imagelist assignment, which
    ' it wil do when it sees no VB ImageList associated with it.
    ' (the TreeView can't be subclassed when we're assigning imagelists...)
    Case TVM_SETIMAGELIST
      Exit Function
Назначить картинки по-человечески тоже нельзя
Код: plaintext
1.
  tvi.iImage =  0  
  tvi.iSelectedImage =  1 
или 1-2, не помню не суть

Ладно, осилили. Вместо красивых иконок какая-та фигня с черными ободками.

Узнал про SystemImageList, обрадовался.
Код: plaintext
1.
2.
3.
4.
5.
6.
  Call TreeView_SetImageList(m_hwndTV, GetSystemImagelist(SHGFI_SMALLICON), TVSIL_NORMAL)

Public Function GetSystemImagelist(uFlags As Long) As Long
  Dim sfi As SHFILEINFO
  ' Any valid file system path can be used to retrieve system image list handles.
  GetSystemImagelist = SHGetFileInfo(App.Path,  0 , sfi, Len(sfi), SHGFI_SYSICONINDEX Or uFlags)
End Function
начинаешь присваивать:
Код: plaintext
1.
  tvi.iImage =  4  
  tvi.iSelectedImage =  5 
Путает иконки, скотина. Depends on фиг знает что.
Начинаешь выяснять.
Код: plaintext
  MsgBox ImageList_GetImageCount(GetSystemImagelist(SHGFI_SMALLICON))
Оно начинает выдавать то 5, то 6, то 295.
Пытаешься понять, выясняется что этот систем лист это какой то кэш, и фиг знает что хранит в тек. момент.

И главное понимаешь, что влез в такое болото, что уже жалеешь что влез.
Сделал так, для очистки совести.
Взял вот этот екзампл:
http://btmtz.mvps.org/treeview/
VBDirectoryTV: Make the TreeView into a DirListBox
http://btmtz.mvps.org/treeview/vbdirectorytv.zip
прибил там кувалдометром и испохабил часть кода (отрубил от дерева сук с требуемым Folder и кастомизировав отображаемое) и получил то чего мне надо.
Большой ценой частную задачу решил, но общеполезная задача как добавлять цветные иконки в произв. treeview осталась в тумане.

Теперь эту муть еще предстоит прикрутить к диалогу (уже кажется цветочками) и вставить в приложение.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Что это за "контрол" такой может быть? с избранными папочками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]