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

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
100R
Сообщения: 3
Зарегистрирован: 07 май 2015, 09:43

07 май 2015, 10:00

З[LEFT]дравствуйте форумчане!!!
С помощью компонента 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);
	}
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

07 май 2015, 15:39

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

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

07 май 2015, 15:46

Romeo писал(а):Я меня был опыт этой использования этой Shell функции, но никаких проблем с ней не было.
а у меня не хочет
Алексей Бачериков
Сообщения: 0
Зарегистрирован: 03 авг 2015, 14:45

03 авг 2015, 14:52

Создаём программы на любой вкус по недорогой цене, любого уровня на сайте http://zakazprogi.usluga.me/
Hoifepype
Сообщения: 2
Зарегистрирован: 06 дек 2016, 08:50

10 фев 2017, 12:53

Раздаем бездепы по 50$.
Выберите счет, инвестируйте полученные 50$ и
наблюдайте за тем, как растут уже ваши деньги.
Получите 50 USD здесь http://rancat.xyz/track/BDP50
Ответить