Конференция "KOL" » Как получить иконку файла по его расширению [Delphi, Windows]
 
  • andreil © (06.03.08 12:40) [0]
    Для 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;


    Но я его никак не могу щаставить работать на КОЛ :(
    Может кто поможет?
  • Dimaxx © (06.03.08 13:34) [1]
    function FileIconSystemIdx( const Path: KOLString ): Integer;
    function FileIconSysIdxOffline( const Path: KOLString ): Integer;

    Все уже сделано до нас...
  • Сашик (06.03.08 14:22) [2]
    Насколько я понял, эта функция работает только тогда, когда в Alias прописан индификатор, а в IconPath путь к файлу. Например GetRegistryIconHandle('iii.zip') - работает, а GetRegistryIconHandle('iii.exe') - у меня не работает (Alias = %1).
    Кстати FileIconSystemIdx, насколько я понял, возвращает индекс иконки.
  • Dimaxx © (06.03.08 16:37) [3]

    > FileIconSystemIdx, насколько я понял, возвращает индекс иконки

    Верно. Заполни коловский ImageList системными иконками и эта функция вернет ее индекс в этом ImageList'е. А потом работай с ней как хочешь. Но она работает только с реально существующими файлами. А FileIconSysIdxOffline работает с файлами, несуществующими на диске физически.
  • andreil © (06.03.08 17:17) [4]
    Делаю для ListView'a так:
    FilesList.LVItemImageIndex[ListItem]:=FileIconSysIdxOffline(Name);


    Где ListItem - хэндл добавленного элемента, Name - имя файла (без пути).
    В итоге иконку не получает :(
  • Dimaxx © (07.03.08 14:15) [5]
    А ты заполнил ImageList прикрепленный к FilesList системными иконками? Если нет - то вполне закономерный результат.
  • andreil © (07.03.08 22:30) [6]
    Сделал так: при создании формы загружаю иконки следующим образом:
    IconList.LoadSystemIcons(false);

  • Dimaxx © (08.03.08 00:58) [7]
    У меня все работает...
  • KOLBoss (18.11.08 19:58) [8]
    я тоже парился но у меня
    запускаю в делфях работает, а запускаю обычным образом
    иконок нет, мистика какаята.
    заменил
    ImageList1.Clear;


    на
    ImageList1.Delete(i);


    всё нормально заработало.
  • pocamaxa (12.07.09 17:14) [9]
    я не pos брал, а LastDelimiter( ',' , iconPath);
    это уж лучше пашет!
  • Бу (08.10.10 13:42) [10]
    Спасибо, помогло. Самому лень писать было
 
Конференция "KOL" » Как получить иконку файла по его расширению [Delphi, Windows]
Есть новые Нет новых   [120350   +21][b:0][p:0.001]