Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.03.2013, 10:34
Аватар для morebeauty
morebeauty morebeauty вне форума
Начинающий
 
Регистрация: 21.06.2012
Сообщения: 106
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию TListView иконки

Делаю весьма специфичный файловый менеджер. Требуется отображать определенные файлы с определенными опциями отображения/запуска. Все готово, кроме одного интерфейсного решения. А именно. Есть ImageList, в котором зашиты иконки для отображаемых файлов. Определенные файловые маски соответствуют определенным иконкам. Но требуется еще, чтобы при выборе некой дефолтной иконки (например с индексом 0), ListView отображал виндовую иконку, соответствующую данному файлу (либо это зашитая в сам файл (например ЕХЕ) используемая икона, либо это икона приложения, с которым ассоциируется файл).
Некоторые способы получения иконки я уже нашел (хотя часть весьма заморочены, так что не откажусь и от такой помощи), но я не знаю как их применить и итемам.
Пока что при создании итема я делаю так
Код:
ListView1.Items[i].ImageIndex := IconIndex //integer
то есть выбираю одну из иконок в соответствующем ImageList. А как итему присвоить картинку не из этого списка?
Ответить с цитированием
  #2  
Старый 11.03.2013, 10:54
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Наполнять лист нужными иконками. Вообще какая-то странная задача. Можно же ShellListView использовать.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 11.03.2013, 11:06
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

первой иконкой (индекс == 0) в TImageList добавить иконку по-умолчанию. далее по мере извлечения из файлов.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 11.03.2013, 11:08
Аватар для morebeauty
morebeauty morebeauty вне форума
Начинающий
 
Регистрация: 21.06.2012
Сообщения: 106
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Наполнять лист нужными иконками. Вообще какая-то странная задача. Можно же ShellListView использовать.
Я в условии написал, почему не могу использвать шелл
Цитата:
Определенные файловые маски соответствуют определенным иконкам

Как объяснить подробнее я не знаю без наводящих вопросов. Да это вам и не нужно. Однако суть задачи я рассказал вполне подробно.
Цитата:
Некоторые способы получения иконки я уже нашел (хотя часть весьма заморочены, так что не откажусь и от такой помощи), но я не знаю как их применить к итемам.
Ответить с цитированием
  #5  
Старый 11.03.2013, 11:10
Аватар для morebeauty
morebeauty morebeauty вне форума
Начинающий
 
Регистрация: 21.06.2012
Сообщения: 106
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
первой иконкой (индекс == 0) в TImageList добавить иконку по-умолчанию. далее по мере извлечения из файлов.
Заполнение TImageList не подходит. Иначе все награбленные иконки появляются в настройках программы, а это недопустимо.

Было неплохо ,если бы у итемов было свойство ListView1.Items[i].Picture.Bitmap (TBitmap), но такого свойства я не нашел.

Последний раз редактировалось morebeauty, 11.03.2013 в 11:13.
Ответить с цитированием
  #6  
Старый 11.03.2013, 11:13
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

можно легко убрать появление награбленных иконок в настройках программы. достаточно к настр. прикрутить другой список. я проверял - это работает.

Цитата:
Сообщение от morebeauty
Было неплохо ,если бы у итемов было свойство ListView1.Items[i].Picture.Bitmap (TBitmap), но такого свойства я не нашел.
сделай ручное отображение элементов списка. я проверял - это работает
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 11.03.2013, 11:16
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от morebeauty
Я в условии написал, почему не могу использвать шелл
Сори, читаю по диагонали.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #8  
Старый 11.03.2013, 11:21
Аватар для morebeauty
morebeauty morebeauty вне форума
Начинающий
 
Регистрация: 21.06.2012
Сообщения: 106
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
сделай ручное отображение элементов списка. я проверял - это работает
Я тоже проверял. Работает, но порой криво (что нибудь, да забуду предусмотреть )
Есть способ проще?
Ответить с цитированием
  #9  
Старый 11.03.2013, 11:24
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

см. третье сообщение - это проще простого.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #10  
Старый 11.03.2013, 11:31
Аватар для morebeauty
morebeauty morebeauty вне форума
Начинающий
 
Регистрация: 21.06.2012
Сообщения: 106
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
первой иконкой (индекс == 0) в TImageList добавить иконку по-умолчанию. далее по мере извлечения из файлов.
А разве не получится так, что ImageList будет забит целой кучей одинаковых иконок?

Может, я просто не совсем понимаю этот способ реализации. можно небольшой примерчик?
Ответить с цитированием
  #11  
Старый 11.03.2013, 11:41
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от morebeauty
А разве не получится так, что ImageList будет забит целой кучей одинаковых иконок?
да, может и такое быть) но кому это мешает? в теории каждый файл может же иметь свою иконку.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #12  
Старый 11.03.2013, 11:44
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

алгоритм прост до безобразия:
-в цикле получения списка файлов читаем иконку из файла
-если иконку получить не удалось, то присваиваем элементу иконку 0, т.е. которая по-умолчанию
-если иконка найдена, добавляем ее в список, а элементу присваиваем последний индекс списка
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #13  
Старый 11.03.2013, 11:49
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от morebeauty
...можно небольшой примерчик?
Что-то типа того
Вложения
Тип файла: zip extract_icon.zip (7.2 Кбайт, 37 просмотров)
Ответить с цитированием
  #14  
Старый 11.03.2013, 11:50
Аватар для morebeauty
morebeauty morebeauty вне форума
Начинающий
 
Регистрация: 21.06.2012
Сообщения: 106
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
-если иконку получить не удалось, то присваиваем элементу иконку 0, т.е. которая по-умолчанию
Тут обратная последовательность.
- Если в настройках файлу соответствует картинка с индексом 0, то меняем картинку на притянутую из файла, иначе оставляем выбранную в настройках.
Цитата:
-если иконка найдена, добавляем ее в список, а элементу присваиваем последний индекс списка
И если в списке будет 1000 файлов блокнота, то в ImageList окажется 1000 одинаковых иконок файла. Не то что бы это очень тяжело, но как минимум очень неправильно.


Alegun, не совсем то, что мне нужно.

Последний раз редактировалось morebeauty, 11.03.2013 в 11:55.
Ответить с цитированием
  #15  
Старый 11.03.2013, 11:57
Аватар для morebeauty
morebeauty morebeauty вне форума
Начинающий
 
Регистрация: 21.06.2012
Сообщения: 106
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Ладно, спрошу конкретнее. Чтобы без лишних предположений и тд.

Допустим, у меня УЖЕ есть нарисованный список в ListView. Нужно выбрать итемы у которых свойство ImageIndex=0 (это легко) и поменять их на другие картинки типа TBitmap.

Как это сделать?

Я ведь могу на ходу (в рунтайме) поменять текст любого итема. Так почему с картинками все так сложно?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter