delphi listview



Автор MuxaTepkuH задал вопрос в разделе Другие языки и технологии

delphi список файлов с иконками в listview и получил лучший ответ

Ответ от Борис Бескровный[гуру]
Интересный вопрос, такие редкость на проекте. За вопрос "пять с плюсом".
По порядку.
Почему отображается одна папка? Тут все просто: а сколько добавляется в ListView элементов? Как видно из кода - только один. И каждый раз меняется именно он. Проблема? Нет. Прост надо для каждого найденного элемента добавлять новую запись в ListBox.
Почему не привязываются иконки? А вот тут сложнее... Читаем библиотеку MSDN. ShGetFileInfo возвращает индекс в системном списке изображений. Он используется? Нет. Тут, похоже, вообще никакой не используется.
Как быть?
Добавляем на форму ImageList и называем его для краткости imglist. Чтобы привязать его к системному получаем его (системного) дескриптор (Handle) и "переназначаем" Handle пользовательского списка на системный (только теперь он становится "только для чтения"):
res := SHGetFileInfo(nil, 0, fi, SizeOf(fi), SHGFI_SYSICONINDEX);
imglist.Handle := res;
Чтобы иконки "привязывались" к элементам, связываем список изображений (ImageList) со списком элементов через свойство, соответствующее способу отображения (LargeImages для vsIcon, SmallImages для vsSmallIcon и т. д.) .
Когда это сделано, мы справедливо можем привязывать индекс картинки к записи в ListView:
li.ImageIndex := fi.iIcon;
Без подготовительной работы эта строчка не имеет смысла.
Ну, и под конец мой код, частично модифицированный твой:
var
atr:integer;
sr1:TSearchRec;
li: TListItem;
fi: TSHFileInfo;
path1: string;
res: HRESULT;
begin
path1 := 'c:';
atr := faAnyFile;
res := SHGetFileInfo(nil, 0, fi, SizeOf(fi), SHGFI_SYSICONINDEX);
imglist.Handle := res;
if (FindFirst(path1 + '*', atr, sr1) = 0) then
repeat
li := lv.Items.Add();
li.Caption := sr1.Name;
ShGetFileInfo(PChar(path1+li.caption), 0, fi, SizeOf(fi), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
li.ImageIndex := fi.iIcon;
until (FindNext(sr1) <> 0);
FindClose(sr1);
end;

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: delphi список файлов с иконками в listview

Как загрузить базу данных *.xls в компонент TListView (Delphi)?
если известна структура, то в чем проблема?
если структура неизвестна тогда ой!! !
интересно
подробнее...
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*