+ Ответить в теме
Показано с 1 по 3 из 3

Тема: Функция SHGetFileInfo не отражает и не меняет размер пиктограммы папок

  1. #1
    dummy 100R is on a distinguished road
    Регистрация
    07.05.2015
    Сообщений
    3
    Вес репутации
    0

    По умолчанию Функция SHGetFileInfo не отражает и не меняет размер пиктограммы папок

    З
    дравствуйте форумчане!!!
    С помощью компонента Listview вывожу файлы из нужной пользователю каталога-директории Функция SHGetFileInfo корректно отображает пиктограммы файлов
    Listview реагирует увеличением или уменьшением рамкой поля в котором отображается пиктограмма файла или папки , но сама пиктограмма размер не меняет. Изначально в 17-й стр., ниже приведенного кода, вторым параметром функции - FindFirst() стоял флаг faAnyFile, но так как возникла проблема с отображением иконок - пиктограмм ПАПОК добавил вторую функцию - FindFirst() на поиск только папок где жестко задал индекс иконки ПАПКИ (методом тыка :help: нашел) и это смущает , ведь описании функции - SHGetFileInfo написано что она получает доступ к спискам пиктрограмм Windows но почему же тогда она не выводит индекс иконки ПАПКИ?
    Код cpp:
    1. void __fastcall Twindowsnetrepository::ExplorerDir(UnicodeString *DirPatch)
    2.     {
    3.         TSHFileInfo SFI = {0};
    4.         TSearchRec filestruct;
    5.         TIcon *icon = new TIcon;
    6.         TListItem *newitem;
    7.  
    8.         ListView1->ViewStyle = vsIcon;
    9.         ListView1->LargeImages = new TImageList(16,16);
    10.         ListView1->SmallImages = new TImageList(16,16);
    11.         ListView1->SmallImages->ShareImages = true;
    12.         ListView1->LargeImages->ShareImages = true;
    13.         ListView1->LargeImages->Handle = SHGetFileInfo(L"*.*", SFGAO_SHARE, &SFI, sizeof(SFI),SHGFI_SELECTED | SHGFI_OPENICON | SHGFI_LARGEICON | SHGFI_SYSICONINDEX | SHGFI_USEFILEATTRIBUTES + SHGFI_ICON );
    14.  
    15.         //Запрашиваем большие иконки
    16.         *DirPatch = *DirPatch + "*.*";
    17.           int res = FindFirst(*DirPatch,faHidden | faArchive | faSysFile + faVolumeID,filestruct);
    18.         while (!res)
    19.         {
    20.             if ((filestruct.Name !="." ) && (filestruct.Name != ".."))
    21.             {
    22.     //Присваиваем системные иконки в ListViewl
    23.               newitem = ListView1->Items->Add();
    24.               newitem->Caption = filestruct.Name;
    25.               newitem->SubItems->Add(filestruct.Size);
    26.               newitem->SubItems->Add(DateTimeToStr(FileDateToDateTime(filestruct.Time)));
    27.  
    28.               SHGetFileInfo((*DirPatch + filestruct.Name).c_str(), SFGAO_SHARE,  &SFI, sizeof(SFI),SHGFI_SELECTED | SHGFI_OPENICON | SHGFI_ICON | SHGFI_SYSICONINDEX | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
    29.               newitem->ImageIndex = SFI.iIcon;
    30.               newitem->OverlayIndex = 1;
    31.             }
    32.             res = FindNext(filestruct);
    33.         }
    34.  
    35.         FindClose(filestruct);
    36.  
    37.         // поиск и вывод  папок
    38.         res = FindFirst(*DirPatch,faDirectory,filestruct);
    39.         while (res == 0)
    40.             {
    41.                 if ((filestruct.Name != ".") && (filestruct.Name != "..") && ((filestruct.Attr & faDirectory) !=0))
    42.                 {
    43.                     newitem = ListView1->Items->Add();
    44.                     newitem->Caption = filestruct.Name;
    45.                                         newitem->ImageIndex = SFI.iIcon;
    46.                     newitem->ImageIndex = 1;
    47.                     newitem->SubItems->Add("");
    48.                     newitem->SubItems->Add(DateTimeToStr(FileDateToDateTime(filestruct.Time)));
    49.                     newitem->OverlayIndex =0 ;
    50.                 }
    51.              res = FindNext(filestruct);
    52.             }
    53.        FindClose(filestruct);
    54.     }
    Последний раз редактировалось Romeo; 07.05.2015 в 15:33. Причина: [code=cpp][/code]

  2. По умолчанию

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
  3. #2
    Moderator Куратор
    system architect
    Romeo is on a distinguished road Аватар для Romeo
    Регистрация
    02.03.2004
    Адрес
    Крым, Севастополь
    Возраст
    37
    Сообщений
    3,091
    Вес репутации
    21

    По умолчанию Re: Функция SHGetFileInfo не отражает и не меняет размер пиктограммы папок

    Я меня был опыт этой использования этой Shell функции, но никаких проблем с ней не было.

    P.S. Перенёс в раздел Win API, Shell.
    Entites should not be multiplied beyond necessity @ William Occam
    ---
    Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
    ---
    Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

  4. #3
    dummy 100R is on a distinguished road
    Регистрация
    07.05.2015
    Сообщений
    3
    Вес репутации
    0

    Cool Re: Функция SHGetFileInfo не отражает и не меняет размер пиктограммы папок

    Цитата Сообщение от Romeo Посмотреть сообщение
    Я меня был опыт этой использования этой Shell функции, но никаких проблем с ней не было.
    а у меня не хочет

+ Ответить в теме

Похожие темы

  1. поиск папок в Паскале
    Уважаемые обитатели форума, у меня такой вопрос - как сделать поиск папок в паскале? поиск файлов уже реализовал, а вот с папками какая-то замута...
    от Oleg_Rus в разделе Delphi и Pascal
  2. Локальная переменная меняет свое значение
    Здравствуйте! Пишу прогу на Си и иногда встречаюсь с такой ситуацией, что локальная переменная меняет свое значение "сама по себе". Ну т.е. явно я...
    от DanilSoldatov в разделе C и C++
  3. Создать структуру папок
    Может кому-то поможет! Формулировка задачи. Создать структуру именных папок с принадлежностью по отделам. Данные представлены в виде таблицы (файл...
    от colen в разделе MS Office и VB(A).
  4. Создать структуру папок
    Формулировка задачи. Создать структуру именных папок с принадлежностью по отделам. Данные представлены в виде таблицы (файл .xls) Пример таблицы...
    от colen в разделе MS Office и VB(A).
  5. ячейка меняет цвет
    Подскажите, пожалуйста как сделать чтобы ячейка выделялась цветом после того как в ней наберется определённая сумма, например: В1= А1+С1+D1+E1 Надо...
    от krank в разделе MS Office и VB(A).

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения