Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Igor-84
28 / 27 / 11
Регистрация: 04.03.2010
Сообщений: 199

Custom-рисование ListView при RowSelect = false

27.11.2015, 16:49. Показов 1835. Ответов 0

Студворк — интернет-сервис помощи студентам
Здравствуйте! Вопрос касается и C++Builder и Delphi.

Для отрисовки итемов в ListView использую custom-рисование. Рисую итем в событии OnCustomDrawItem.
Решил поэкспериментировать: а что будет, если в свойствах LV указать RowSelect = false, т.е. выделять не всю строку целиком, а только первую ячейку итема, а при рисовании заливать сразу всю строку. Итак, код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
RECT itm_rect = Item->DisplayRect(drBounds);
     
       if(Item->Selected)
       {
       ListView1->Canvas->Brush->Color = ListView1->Focused() ? clBlue : clWebLavender;
       }
       else
       {
       ListView1->Canvas->Brush->Color = clWhite;
       }
     
ListView1->Canvas->FillRect(itm_rect);
     
DefaultDraw = false;
Вот что получается:


А именно, когда сначала выделить строку - она заливается синим цветом полностью.
А если кликнуть по другому элементу (переключить фокус с LV), то лавандовым цветом заливается только drLabel-прямоугольник итема, который я нигде не указывал. Я указывал размер заливаемого прямоугольника = drBounds. Но заданный прямоугольник почему-то игнорируется. Почему?

Так как в конце функции CustomDrawItem() я указываю DefaultDraw = false;, это означает, что рисование будет пользовательское, а также не будет вызвано OnCustomDrawSubItem() для стандартного или пользовательского рисования в прямоугольниках сабитемов. Отсюда назревает новый вопрос - а как же тогда рисовать в прямоугольниках сабитемов? Если код для рисования сабитемов я напишу в функции CustomDrawItem(), то это, получается, я уже буду выходить за пределы инвалидируемой области - т.е. рисовать там, где нельзя.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
RECT itm_rect = Item->DisplayRect(irLabel);//рисуем в пределах первой ячейки
     
       if(Item->Selected)
       {
       ListView1->Canvas->Brush->Color = ListView1->Focused() ? clBlue : clWebLavender;
       }
       else
       {
       ListView1->Canvas->Brush->Color = clWhite;
       }
     
ListView1->Canvas->FillRect(itm_rect);
     
//ЗАЛИВКА САБИТЕМА
RECT sub_rect = Item->DisplayRect(drBounds);
sub_rect.left += ListView1->Column[0]->Width;
sub_rect.right = sub_rect.left + ListView1->Column[1]->Width;
ListView1->Canvas->Brush->Color = clWebOrange;
ListView1->Canvas->FillRect(sub_rect);
     
 DrawTextW(ListView1->Canvas->Handle, Item->Caption.c_str(), -1, &sub_rect, DT_NOCLIP | DT_WORD_ELLIPSIS);
 
 DefaultDraw = false;
И получится такое:


Подскажите, пожалуйста, как быть в этом случае, кроме как включать RowSelect = true?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.11.2015, 16:49
Ответы с готовыми решениями:

Изменил фон для Custom ListView не работает подсветка при нажатии
Для каждого четного Custom ListView устанавливаю цвет фона : if ((position % 2)!=0) ...

Редактирование ячеек при включенном RowSelect
Кто-то может сталкивался как с включенным RowSelect начать редактировать stringgrid по нажатию кнопки, а после перехода на другую ячейку,...

Custom ListView item setColor
Всех С Новым Годом! Начал изучать разработку под Android на IDE Android Studio. Создал TabHost с тремя вкладками, в первой вкладке создал...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2015, 16:49
Помогаю со студенческими работами здесь

TabHost, ListView и custom Adapter
Здравствуйте. В общем есть TabHost c 3 вкладками. При нажатии на вкладку ХЗ показаться данные в ListView, но у меня при нажатии на эту...

Custom ListView - тап по всему ряду
Добрый день. Мой ListView содержит TextView и HorizotalScrollView с несколькими изображениями. При этом обработчик OnItemClickListener...

Вылет приложения про создании Custom ListView
Главная Activity import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; ...

Как в WPF создать Custom Control унаследованный от Listview
Всем привет! Долго мучаюсь, просканировал инет, но так и не нашел решения - как сделать Custum Control унаследованный от Listview. Создание...

Disabled ListView без использования Enabled=False?
Как сделать Disabled ListView без использования Enabled=False? Дело в том, что использование свойства Enabled=False кроме блокировки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru