С помощью компонента Listview вывожу файлы из нужной пользователю каталога-директории Функция SHGetFileInfo корректно отображает пиктограммы файлов
Listview реагирует увеличением или уменьшением рамкой поля в котором отображается пиктограмма файла или папки , но сама пиктограмма размер не меняет. Изначально в 17-й стр., ниже приведенного кода, вторым параметром функции - FindFirst() стоял флаг faAnyFile, но так как возникла проблема с отображением иконок - пиктограмм ПАПОК добавил вторую функцию - FindFirst() на поиск только папок где жестко задал индекс иконки ПАПКИ (методом тыка :help: нашел) и это смущает , ведь описании функции - SHGetFileInfo написано что она получает доступ к спискам пиктрограмм Windows но почему же тогда она не выводит индекс иконки ПАПКИ?
[/LEFT]
Код: Выделить всё
void __fastcall Twindowsnetrepository::ExplorerDir(UnicodeString *DirPatch)
{
TSHFileInfo SFI = {0};
TSearchRec filestruct;
TIcon *icon = new TIcon;
TListItem *newitem;
ListView1->ViewStyle = vsIcon;
ListView1->LargeImages = new TImageList(16,16);
ListView1->SmallImages = new TImageList(16,16);
ListView1->SmallImages->ShareImages = true;
ListView1->LargeImages->ShareImages = true;
ListView1->LargeImages->Handle = SHGetFileInfo(L"*.*", SFGAO_SHARE, &SFI, sizeof(SFI),SHGFI_SELECTED | SHGFI_OPENICON | SHGFI_LARGEICON | SHGFI_SYSICONINDEX | SHGFI_USEFILEATTRIBUTES + SHGFI_ICON );
//Запрашиваем большие иконки
*DirPatch = *DirPatch + "*.*";
int res = FindFirst(*DirPatch,faHidden | faArchive | faSysFile + faVolumeID,filestruct);
while (!res)
{
if ((filestruct.Name !="." ) && (filestruct.Name != ".."))
{
//Присваиваем системные иконки в ListViewl
newitem = ListView1->Items->Add();
newitem->Caption = filestruct.Name;
newitem->SubItems->Add(filestruct.Size);
newitem->SubItems->Add(DateTimeToStr(FileDateToDateTime(filestruct.Time)));
SHGetFileInfo((*DirPatch + filestruct.Name).c_str(), SFGAO_SHARE, &SFI, sizeof(SFI),SHGFI_SELECTED | SHGFI_OPENICON | SHGFI_ICON | SHGFI_SYSICONINDEX | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
newitem->ImageIndex = SFI.iIcon;
newitem->OverlayIndex = 1;
}
res = FindNext(filestruct);
}
FindClose(filestruct);
// поиск и вывод папок
res = FindFirst(*DirPatch,faDirectory,filestruct);
while (res == 0)
{
if ((filestruct.Name != ".") && (filestruct.Name != "..") && ((filestruct.Attr & faDirectory) !=0))
{
newitem = ListView1->Items->Add();
newitem->Caption = filestruct.Name;
newitem->ImageIndex = SFI.iIcon;
newitem->ImageIndex = 1;
newitem->SubItems->Add("");
newitem->SubItems->Add(DateTimeToStr(FileDateToDateTime(filestruct.Time)));
newitem->OverlayIndex =0 ;
}
res = FindNext(filestruct);
}
FindClose(filestruct);
}