![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить иконку папки для ShGetFileInfo
Андрей Молчанов © (2005-08-08 22:10:00)Здравствуйте!
Нужно получить индекс иконки обыкновенной папки от функции SHGetFileInfo. В действительности папка может не существовать. По идее можно взять от C:\Windows, но такой папки может и не быть или пользователь может установить на нее свою иконку. Спасибо.
Андрей Молчанов (2005-08-10 08:48:00) [1]:) Спасибо
Mx (2005-08-09 22:27:00) [2]
> Андрей Молчанов (09.08.05 18:47) [17]
Ну вот видишь, "камушек" ShellAPI все больше поддается :)
Андрей Молчанов (2005-08-09 18:47:00) [3]Методом тыка наконец то нашел - надо просто вызвать SHGetFileInfo( '', 0, fi, SizeOf(fi), SHGFI_SMALLICON or SHGFI_SYSICONINDEX);
fi.iIcon будет иконкой папки
Андрей Молчанов (2005-08-09 11:45:00) [4]Пожалуйста, приведите код, с помощью которого я могу присвоить индекс стандартной, возможно несуществующей, папки.
Mx (2005-08-09 11:00:00) [5]
> Андрей Молчанов (09.08.05 10:32) [13]
> Нет, у меня imagelist системный стоит
Что значит системный? И чем его "индекс" отличается от обычного?
Гаврила (2005-08-09 10:56:00) [6]Кстати, именно на папку Windows иконка, похоже, не может меняться поьльзователем
Андрей Молчанов (2005-08-09 10:32:00) [7]Нет, у меня imagelist системный стоит. Мне нужно индексиконки папки.
Rouse_ (2005-08-09 10:22:00) [8]> Как мне присвоить элементу дерева, связанному со списком,
> иконку стандартной папки?
Возьми эту иконку из %SystemRoot%\system32\SHELL32.dll иконку с индексом 3
Андрей Молчанов (2005-08-09 10:10:00) [9]Похоже, я задал вопрос некорректно - у меня есть ImageList
CheckTree.Images.Handle := SHGetFileInfo('C:\', 0, fi, SizeOf(fi), SHGFI_SMALLICON or SHGFI_SYSICONINDEX);
Как мне присвоить элементу дерева, связанному со списком, иконку стандартной папки? Причем, в реальности папки может не быть.
Наиль (2005-08-09 00:22:00) [10]Придётся мне отвечать за свои слова.
Значок папки (у меня XP) храниться в реестре по адресу
HKEY_LOCAL_MACHINE\Classes\Folder\DefaultIcon
Кстати, я заметил, что DefaultIcon имеется очень у многих объектов (интерфейсов) в реестре.
Mx (2005-08-09 00:08:00) [11]
> Наиль © (08.08.05 22:52) [8]
Я бы не был так уверен про реестр. Например, у меня приведенного ключа нет вообще.
Наиль (2005-08-08 22:52:00) [12]Думаю, ясно, что нужно читать соотвествующую ветку реестра, чтобы узнать иконку общую для всех папок.
Но это пустяки, у каждой папки может быть свой значок, см. [3]
Он храниться в Desktop.ini, в соответсвующей папке в виде
[.ShellClassInfo]
IconFile=%SystemRoot%\system32\SHELL32.dll
IconIndex=19
Делай выводы.
Наиль (2005-08-08 22:44:00) [13]Цитата из каких-то "советов"
Стандартные значки Windows 9x. В разделе реестра [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Current Version\explorer\Shell Icons] содержится множество строковых параметров с именем в виде числа. Каждый из них отвечает за значок какого-либо объекта:
...
3 Папка
4 Открытая папка
...
Установите значением параметра путь к значку (если значок хранится в библиотеке, то после пути к ней, через запятую, нужно указать номер значка, начиная с нуля), и он изменится.
Mx (2005-08-08 22:36:00) [14]
> Андрей Молчанов (08.08.05 22:26) [4]
А зачем тебе это надо? Может по-другому сформулировать задачу, тогда и другое решение будет?
Mx (2005-08-08 22:35:00) [15]Блин, фиг знает, особенно с учетом замечания C помощью StyleXP
Андрей Молчанов (2005-08-08 22:26:00) [16]
> Если я правильно понял, то можно залезть в Shell32.dll и
> посмотреть индекс. Думаю он стандартный для всех Windows.
Действительно - 4 и 5. Но, при использовании подставляются не те иконки :(
> Каким образом?
C помощью StyleXP
Mx (2005-08-08 22:21:00) [17]
> Гаврила © (08.08.05 22:19) [2]
> > или пользователь может установить на нее свою иконку
> Каким образом?
Всплывающее меню/Свойства/Настройка
Гаврила (2005-08-08 22:19:00) [18]
> но такой папки может и не быть
Папку Windows можно узнать
> или пользователь может установить на нее свою иконку
Каким образом?
Mx (2005-08-08 22:16:00) [19]Если я правильно понял, то можно залезть в Shell32.dll и посмотреть индекс. Думаю он стандартный для всех Windows.