ShellAPI
От: jack78  
Дата: 13.01.04 18:52
Оценка:
При использовании стандартной функции SHGetFileInfo — ShellAPI в Delphi v.6.0 возникла одна проблема.
При использовании флагов uFlags получаю атрибуты файла, тип файла, размер файла , а вот системные иконки не могу получить. Привожу текст:

Procedure MyDraw;
var fi:TSHFileInfo;
    SmallImage:TImageList;
begin
 SmallImage:=TImageList.Create(nil);
 SmallImage.Handle:=SHGetFileInfo('*.*',0,fi,SizeOf(fi),SHGFI_SMALLICON or 
                                          SHGFI_ICON or SHGFI_SYSICONINDEX);
 SHGetFileInfo('*.txt',0,fi,SizeOf(fi),SHGFI_SMALLICON or 
                                          SHGFI_ICON or SHGFI_SYSICONINDEX);
 SmallImage.Draw(Image1.Canvas,10,10,fi.iIcon);
end;
Re: ShellAPI
От: Elevener  
Дата: 14.01.04 12:03
Оценка:
Здравствуйте, jack78, Вы писали:

J>При использовании стандартной функции SHGetFileInfo — ShellAPI в Delphi v.6.0 возникла одна проблема.

J> При использовании флагов uFlags получаю атрибуты файла, тип файла, размер файла , а вот системные иконки не могу получить. Привожу текст:
В зависимости от того что хочешь получить: если хочешь получить иконку к файлу указывай путь к файлу, а
не *, а если хочешь получить иконку к определенному расширению добавь флаг SHGFI_USEFILEATTRIBUTES в список
флагов. И еще, добавь
SmallImage.ShareImages := true;

после присвоения handle чтобы у тебя ImageList не пытался освобождать системный список иконок.
... << RSDN@Home 1.1.0 stable >>
Re[2]: ShellAPI
От: jack78  
Дата: 14.01.04 15:49
Оценка:
Здравствуйте, Elevener, Вы писали:

E>Здравствуйте, jack78, Вы писали:


J>>При использовании стандартной функции SHGetFileInfo — ShellAPI в Delphi v.6.0 возникла одна проблема.

J>> При использовании флагов uFlags получаю атрибуты файла, тип файла, размер файла , а вот системные иконки не могу получить. Привожу текст:
E>В зависимости от того что хочешь получить: если хочешь получить иконку к файлу указывай путь к файлу, а
E>не *, а если хочешь получить иконку к определенному расширению добавь флаг SHGFI_USEFILEATTRIBUTES в список
E>флагов. И еще, добавь
E>
E>SmallImage.ShareImages := true;
E>

E>после присвоения handle чтобы у тебя ImageList не пытался освобождать системный список иконок.

Вообщето это просто был тест с использованием '*.txt' я в принципе хотел получить доступ к системным иконкам самое интересное, что
1. рисует у меня в Image1.Canvas белый квадрат
2. SHGetFileInfo возвращает при использовании выше указанных флагов 0 !!??

В принципе мне это всё было нежно для решения одной проблемки следующего содержания:

Я думаю вы знакомы с компонентом NMFTP, так вот у меня есть некая удалённая папка на FTP (при это я вхожу на сервер не через i-net, а по телефону), используя компонент NMFTP и ListView получаю что-то на подобии ShellTreeView.
!! Однако если есть вложенные папки (незнаю сталкивался кто-нибудь с этим) названием примерно [First Second] то при
ParseList:=true
FTPDirectoryList.name[N] возвращает мне !!!!! [Second]
Покопавшись в исходнике я переписал сейчас всё работает.

Сечас же возникла выше указанная проблема никак не могу по расширению файла получить системную иконку чтобы в дальнейшем прорисовать её в ListView
Re[2]: ShellAPI
От: jack78  
Дата: 14.01.04 17:37
Оценка:
Здравствуйте, Elevener, Вы писали:

E>Здравствуйте, jack78, Вы писали:


J>>При использовании стандартной функции SHGetFileInfo — ShellAPI в Delphi v.6.0 возникла одна проблема.

J>> При использовании флагов uFlags получаю атрибуты файла, тип файла, размер файла , а вот системные иконки не могу получить. Привожу текст:
E>В зависимости от того что хочешь получить: если хочешь получить иконку к файлу указывай путь к файлу, а
E>не *, а если хочешь получить иконку к определенному расширению добавь флаг SHGFI_USEFILEATTRIBUTES в список
E>флагов. И еще, добавь
E>
E>SmallImage.ShareImages := true;
E>

E>после присвоения handle чтобы у тебя ImageList не пытался освобождать системный список иконок.

Спасибо за подсказку на счёт флага SHGFI_USEFILEATTRIBUTES заработала правда пришлось добавить SendMessage для полноты ощущений, если интересно что из всей этой задумки получилось пиши на я-мал: jack78@bk.ru
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.