Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 574

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Можно ли в компоненте ListView (TListView), для его пунктов (items) загружать картинки (BMP)не с ListView а отдельно, например с потока, ну вообщем етого делать нельзя, насколько я рассмотрел етот компонент, но возможно ли такие сделать? или может проще использовать какойто другой компонент... подскажите на счет ListView и насчет другого компонента.

Chyenko Ruslan Alexsandrovich Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Chyenko Ruslan Alexsandrovich (статус: Посетитель)
Вопрос отправлен: 15 мая 2007, 21:24
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Chyenko Ruslan Alexsandrovich!
Можно заюзать программную прорисовку. Вы сами себе где нибуть в массиве храните картинки. А по мере надобности - прорисовываете. А как вы их храните - ваше дело.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 15 мая 2007, 23:23
Оценка за ответ: 3

Ответ #2. Отвечает эксперт: min@y™

А чем плох TImageList? В него же можно добавлять/удалять картинки динамически. Вот метод (из хэлпа):

Adds an image to the image list along with a color which is used to generate the transparent mask.

Delphi syntax:

function AddMasked(Image: TBitmap; MaskColor: TColor): Integer;

C++ syntax:

int __fastcall AddMasked(Graphics::TBitmap* Image, Graphics::TColor MaskColor);

Description

AddMasked is similar to Add except that a mask bitmap is not specified. Instead, a color that can be used to automatically generate the masks is specified. Each pixel of the specified color in the image bitmap is changed to black, and the corresponding bit in the mask is set to one. As a result, any pixel in the image that matches the specified color is transparent when the image is drawn. AddMasked returns -1 if it fails, 0 if it’s successful.

Нужно просто создать TBitmap, загрузить в него картинку (из файла или из потока, например, из TFileStream) и добавить в ImageList описанным выше методом. А для нужных Item'ов ListView присвоить ImageIndex добавленной картинки. Вот и всё.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 16 мая 2007, 08:14
Оценка за ответ: 1

Комментарий к оценке: Спасибо за ответ, но мне не нужно их хранить в imagelist, может правильней будет сказать, мне нужно изменять картинку пункта ListView динамически... т.е. загрузить одну, через время етому же пункту загрузить другую, также со всеми пунктами. (вставить ети картинки на стадии разработке или при загрузки проги в imagelist неполучится, т.к. ети картинки прередаются по сети от одного клиента - другому (картинка весит макс. около 1 кб) поетому нет смысла их сохранять и подгружать в имаглист, т.к. их много и все разные)

Мини-форум вопроса

Всего сообщений: 7; последнее сообщение — 17 мая 2007, 12:05; участников в обсуждении: 3.
Chyenko Ruslan Alexsandrovich

Chyenko Ruslan Alexsandrovich (статус: Посетитель), 16 мая 2007, 12:49 [#1]:

Вадим К, на счет массива ето врядли, наверно лучше уже listview, но он мне неподойдет, можите подробней рассказать можна ли прорисовать картинку для пункта один раз? или ее нужно прорисовывать за все время работы приложения.
min@y™

min@y™ (статус: Доктор наук), 16 мая 2007, 15:49 [#2]:

Спасибо за столь высокую оценку.
Советую прочитать мой ответ ещё раз. Там речь идёт как раз о ДИНАМИЧЕСКОЙ загрузке картинок в ImageList и, соответственно, о динамической их замене при отображении в ListView.

Могу написать пример. Но не буду, желание пропало.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Chyenko Ruslan Alexsandrovich

Chyenko Ruslan Alexsandrovich (статус: Посетитель), 16 мая 2007, 17:50 [#3]:

да я ж писал динамически ненужно. непишите :)
Вадим К

Вадим К (статус: Академик), 16 мая 2007, 18:55 [#4]:

Chyenko Ruslan Alexsandrovich! Почему вы боитесь много раз прорисовывать картинки? Думаете будет тормозить? ну только если их пару тысяч. Дело в том, что в обработчике OnDrawItem (там есть ещё несколько подобных) делфи вызывает тогда, когда надо отрисовать листвью. Для элементов, которые не видны ничего рисоваться не будет (а зачем)
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 17 мая 2007, 08:12 [#5]:

>> да я ж писал динамически ненужно. непишите :)

Ничего не понимаю! Цитирую ваш комментарий к моему ответу: "мне нужно изменять картинку пункта ListView динамически...".

Вспоминается бородатый анекдот про Винни-Пуха и Пятачка: "...это не булочка, а бублик...".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Chyenko Ruslan Alexsandrovich

Chyenko Ruslan Alexsandrovich (статус: Посетитель), 17 мая 2007, 12:02 [#6]:

да, несовсем удачно выразился ))) самому смешно стало. я имел ввиду без применения массива чтоб напостой их перерисовывать и listview 8-\. 1 раз загрузить и забыть. ну вообщем я суть понял что надо делать, всем спасиба ;)
Chyenko Ruslan Alexsandrovich

Chyenko Ruslan Alexsandrovich (статус: Посетитель), 17 мая 2007, 12:05 [#7]:

опять недописал.... а то тут некорорые посмецца любят над людьми ) "1 раз загрузить и забыть" и периодически сменять ету картинку другой, которая находится в потоке memorystream... ладна пасиба.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.02 сек.