|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.05.2013, 02:09 | #1 |
Пользователь
Регистрация: 03.08.2007
Сообщений: 37
|
(C++ Builder) TreeView: "дорисовать" третью иконку к записи.
Всем привет!
Как известно у компонента TreeView есть возможность в дереве поставить иконку (Image) к записи и ещё вторую иконку - StateImage. А можно ли "дорисовать" ещё одну, третью иконку, кроме Image и StateImage? |
17.05.2013, 07:42 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Если и можно (в чем я не сомневаюсь) то придется делать отрисовку всего дерева, каждого его элементика своим кодом в событиях OnCustomDraw и OnCustomDrawItem
Я когда-то пробовал, в принципе повозится можно, но забросил это дело.
I'm learning to live...
|
11.06.2013, 16:24 | #3 |
Пользователь
Регистрация: 03.08.2007
Сообщений: 37
|
Я разобрался как "дорисовать" третью иконку к узлу TreeView!
Всем доброго времени суток!
Почти месяц назад я, в этой теме, задавал вопрос (см. выше). Чуть позже решение этой проблемы было найдено. И сегодня у меня есть возможность поделиться с форумчанами своим решением. Я приношу извинения, если эта тема поднималась не раз, но всё-таки, может быть, тем людям, которые задались подобным вопросом, будет легче найти ответ на него. Итак, как же "дорисовать" третью иконку к узлу в компоненте TreeView? Привожу пример на С++ Builder, размер картинок 16*16 пикселей в формате BMP. Я пытался реализовать это используя события OnCustomDraw и OnCustomDrawItem компонента TreeView для каждого узла. Но так ничего и не получилось. Решение оказалось намного проще, чем я думал . Нужно просто "склеить" две картинки и поместить как одну картинку в Image или StateImage узла дерева. Что нам потребуется для реализации идеи: 1. Кладём на форму три ImageList 'а. Один для первой картинки (FirstImageList), другой для второй - SecondImageList, третий для итоговой ("склеенной") - ResultImageList. В FirstImageList и SecondImageList нужно предварительно загрузить картинки, которые мы будем склеивать. 2. Создадим динамически три переменные типа TBitmap для проведения операции "склеивания": ImOne - первая картинка, ImTwo - вторая, ImResult - итоговая ("склеенная"). Код:
Код:
Для рисования чего-либо (картинки, например) у класса TBitmap есть Canvas. У него есть метод Draw. Вот этим методом мы сейчас воспользуемся. 1. Берём картинки из ImageList' ов по заданным индексам и присваиваем переменным ImOne и ImTwo соответственно. Код:
Код:
Код:
4. Теперь нам осталось поместить итоговую картинку в ResultImageList на белом фоне (clWhite). Код:
Иллюстрацию идеи смотрите во вложении. Первая картинка - отдельная - реализует "галочку" для узла, а следующие две - "склеенные" по данному алгоритму. Итого получается три картинки. Хотя по умолчанию TreeView позволяет нарисовать для узла только две. Приведённый выше алгоритм универсален: можно, например, склеивать неограниченное число картинок, если динамически создать массив переменных типа TBitmap. Привожу код процедуры полностью: Код:
|
13.04.2015, 14:55 | #4 |
Регистрация: 07.06.2011
Сообщений: 7
|
вопрос
А должен ли ImageList для склеенных картинок иметь Width = 32 ?
И можно ли комбинировать в TreeView->Images отображение одной или двух картинок? Или только две должны быть? ImageList по-умолчанию имеет ширину 16. Отображать склеенные не получается. В TreeView->StateImages кладу визуализацию CheckBox |
02.11.2018, 12:44 | #5 |
Новичок
Джуниор
Регистрация: 29.04.2016
Сообщений: 2
|
Пытаюсь воспользоваться этим методом (спасибо автору!), однако выдается множество подобных ошибок (перечень неполный):
[C++ Error] Unit1.cpp(25): E2238 Multiple declaration for 'ImResult' [C++ Error] Unit1.cpp(17): E2344 Earlier declaration of 'ImResult' [C++ Error] Unit1.cpp(25): E2141 Declaration syntax error [C++ Error] Unit1.cpp(22): E2451 Undefined symbol 'FirstImageList' [C++ Error] Unit1.cpp(23): E2451 Undefined symbol 'SecondImageList' [C++ Error] Unit1.cpp(30): E2451 Undefined symbol 'ResultImageList' Почему так? C++ Builder 6 |
02.11.2018, 14:47 | #6 | ||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Потому что тупое копирование кода плохо работает.
Цитата:
Цитата:
|
||
02.11.2018, 15:56 | #7 | |
Новичок
Джуниор
Регистрация: 29.04.2016
Сообщений: 2
|
Цитата:
ИмиджЛисты на форме есть. |
|
02.11.2018, 15:59 | #8 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Значит показывайте свой код
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") | funnyy | Помощь студентам | 3 | 17.10.2012 17:40 |
TreeView с CheckBox"ом для C++ Builder | Freeman-c | Помощь студентам | 0 | 31.07.2012 14:00 |
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. | воваава | Помощь студентам | 3 | 01.12.2011 12:50 |
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" | aleksei78 | Microsoft Office Excel | 13 | 25.08.2009 12:04 |
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder | AleksP | C++ Builder | 7 | 11.04.2009 13:06 |