При использовании стандартной функции 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;
Здравствуйте, jack78, Вы писали:
J>При использовании стандартной функции SHGetFileInfo — ShellAPI в Delphi v.6.0 возникла одна проблема.
J> При использовании флагов uFlags получаю атрибуты файла, тип файла, размер файла
, а вот системные иконки не могу получить. Привожу текст:
В зависимости от того что хочешь получить: если хочешь получить иконку к файлу указывай путь к файлу, а
не *, а если хочешь получить иконку к определенному расширению добавь флаг SHGFI_USEFILEATTRIBUTES в список
флагов. И еще, добавь
SmallImage.ShareImages := true;
после присвоения handle чтобы у тебя ImageList не пытался освобождать системный список иконок.
... << RSDN@Home 1.1.0 stable >>
Здравствуйте, 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
Здравствуйте, 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