-
Для VCL'а есть такой вот код: function GetRegistryIconHandle(FileName: string): HICON;
var
R: TRegistry;
Alias, IconPath: string; IconNum, QPos: Integer; begin
IconNum := 0;
R := TRegistry.Create;
try
R.RootKey := HKEY_CLASSES_ROOT;
if R.OpenKey('\' + ExtractFileExt(FileName), True) then
Alias := R.ReadString('');
R.CloseKey;
if R.OpenKey('\' + Alias + '\DefaultIcon', True) then
IconPath := R.ReadString('');
R.CloseKey;
QPos := Pos(',', IconPath);
if QPos <> 0 then
begin
IconNum := StrToInt(Copy(IconPath, QPos + 1, 4));
IconPath := Copy(IconPath, 1, QPos - 1)
end;
finally
R.Free;
end;
Result := ExtractIcon(hInstance, PChar(IconPath), IconNum);
end; Но я его никак не могу щаставить работать на КОЛ :( Может кто поможет?
-
function FileIconSystemIdx( const Path: KOLString ): Integer; function FileIconSysIdxOffline( const Path: KOLString ): Integer;
Все уже сделано до нас...
-
Насколько я понял, эта функция работает только тогда, когда в Alias прописан индификатор, а в IconPath путь к файлу. Например GetRegistryIconHandle('iii.zip') - работает, а GetRegistryIconHandle('iii.exe') - у меня не работает (Alias = %1). Кстати FileIconSystemIdx, насколько я понял, возвращает индекс иконки.
-
> FileIconSystemIdx, насколько я понял, возвращает индекс иконки
Верно. Заполни коловский ImageList системными иконками и эта функция вернет ее индекс в этом ImageList'е. А потом работай с ней как хочешь. Но она работает только с реально существующими файлами. А FileIconSysIdxOffline работает с файлами, несуществующими на диске физически.
-
Делаю для ListView'a так: FilesList.LVItemImageIndex[ListItem]:=FileIconSysIdxOffline(Name); Где ListItem - хэндл добавленного элемента, Name - имя файла (без пути). В итоге иконку не получает :(
-
А ты заполнил ImageList прикрепленный к FilesList системными иконками? Если нет - то вполне закономерный результат.
-
Сделал так: при создании формы загружаю иконки следующим образом: IconList.LoadSystemIcons(false);
-
У меня все работает...
-
я тоже парился но у меня запускаю в делфях работает, а запускаю обычным образом иконок нет, мистика какаята. заменил ImageList1.Clear; на ImageList1.Delete(i); всё нормально заработало.
-
я не pos брал, а LastDelimiter( ',' , iconPath); это уж лучше пашет!
-
Спасибо, помогло. Самому лень писать было
|