На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > Ассоциированные с файлом иконки.
      Вот, может кому потом пригодится.

      ExpandedWrap disabled
        uses ShellApi, Commctrl, ShlObj;
         
        const
          SHIL_LARGE     = $00;  // Отображает иконку файла размером 32x32 или 48x48 пикселей
                                 // (в зависимости от системных настроек).
          SHIL_SMALL     = $01;  // Размер иконки - обычно 16x16 (зависит от размера пользовательской иконки)
          SHIL_EXTRALARGE= $02;  // Размер иконки - обычно 48x48 (зависит от размера пользовательской иконки)
          SHIL_SYSSMALL  = $03;  // Размер иконки определяется параметрами SM_CXSMICON и SM_CYSMICON ф-ции
                                 // GetSystemMetrics()
          SHIL_JUMBO     = $04;  // Windows Vista +. Размер иконки - обычно 256x256 пикселей.
         
          IID_IImageList: TGUID= '{46EB5926-582E-4017-9FDF-E8998DAA0950}';
         
        function GetImageListSH(SHIL_FLAG:Cardinal): HIMAGELIST;
        type
          _SHGetImageList = function (iImageList: integer; const riid: TGUID; var ppv: Pointer): hResult; stdcall;
        var
          Handle        : THandle;
          SHGetImageList: _SHGetImageList;
        begin
          Result:= 0;
          Handle:= LoadLibrary('Shell32.dll');
          if Handle<> S_OK then
          try
            SHGetImageList:= GetProcAddress(Handle, PChar(727));
            if Assigned(SHGetImageList) and (Win32Platform = VER_PLATFORM_WIN32_NT) then
              SHGetImageList(SHIL_FLAG, IID_IImageList, Pointer(Result));
          finally
            FreeLibrary(Handle);
          end;
        end;
         
         
        Procedure GetIconFromFile(aFile:String; var aIcon : TIcon;SHIL_FLAG:Cardinal);
        var
          aImgList    : HIMAGELIST;
          SFI         : TSHFileInfo;
        Begin
            //Индекс в системном imagelist'е
            SHGetFileInfo(PChar(aFile), FILE_ATTRIBUTE_NORMAL, SFI,
                         SizeOf( TSHFileInfo ), SHGFI_ICON or SHGFI_LARGEICON or SHGFI_SHELLICONSIZE or
                         SHGFI_SYSICONINDEX or SHGFI_TYPENAME or SHGFI_DISPLAYNAME );
         
            if not Assigned(aIcon) then
            aIcon:= TIcon.Create;
            //получаем дескриптор системного imagelist'а
            aImgList:= GetImageListSH(SHIL_FLAG);
            //получаем дескриптор иконки
            aIcon.Handle:= ImageList_GetIcon(aImgList, Pred(ImageList_GetImageCount(aImgList)), ILD_NORMAL);
        End;


      Пример использования:
      ExpandedWrap disabled
        var
          Flags: Cardinal;
          ico: TIcon;
        begin
          ico := TIcon.Create;
          Flags := SHIL_LARGE;
          repeat
            GetIconFromFile(<имя_файла>, ico, Flags);
            ico.SaveToFile(Format('Icon Flag-%d Size-%dx%d.ico', [Flags, ico.Width, ico.Height]));
            Flags := Flags + 1; // следующий флаг
          until Flags = 5;
        end;


      Источник: http://stackoverflow.com/questions/1703186...the-vista-shell
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0163 ]   [ 17 queries used ]   [ Generated: 28.03.24, 21:17 GMT ]