Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получить иконку папки для 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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо