CustomDraw для TListView

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

CustomDraw для TListView

Сообщение zub »

Нужно чуток приукрасить TListView с ViewStyle:=vsReport. Назначил onCustomDrawSubItem, всё вроде нарисовал, но никак не могу разобраться как правильно обработать выделение итема.
Если ловить выделение внутри onCustomDrawSubItem просто

Код: Выделить всё

if cdsSelected in state then ...

подвести мышку к рисуемому мной субитему и оставить ее на секунду в покое вызовется onCustomDrawSubItem с state=[] и соответственно он перерисуется в невыделенном состоянии.

Если ловить как

Код: Выделить всё

if (cdsSelected in state)or(Item = Sender.Selected) then ..

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

Поделитесь пожалуйста грамотным примером как это дело организовать? Не баг ли вызов процедуры отрисовки с state=[]?

Вышесказанное было под WIN, под GTK2 вообще ничего не выходит, т.к. Item.DisplayRectSubItem возвращает неправильный рект((
.wOvAN
постоялец
Сообщения: 118
Зарегистрирован: 16.04.2010 06:36:12
Контактная информация:

Сообщение .wOvAN »

customdraw вообще практически не реализован в ряде компонентов, а прочих лишь частично.
Аватара пользователя
evb87ar
новенький
Сообщения: 52
Зарегистрирован: 18.01.2012 21:08:02
Откуда: г. Архангельск

Сообщение evb87ar »

zub, в ListView CustomDraw и схожий метод AdvancedCustomDraw вообще пока не работоспособно. У меня при отрисовке через данный метод вообще компонент начинает мерцать бесконечно.

Issue висит на баг-трэкере, но что-то они забили на этот баг.
http://bugs.freepascal.org/view.php?id=22408
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Ну уж не работает. Почти работает))
>>Issue висит на баг-трэкере, но что-то они забили на этот баг.
Апни баг, добавь картинку или еще пример. Сейчас вроде на багтрекере оживление
http://bugs.freepascal.org/view.php?id=23057
http://bugs.freepascal.org/view.php?id=23093
http://bugs.freepascal.org/view.php?id=23094
были оперативно исправлены, один правда потом откатили((

И всетаки state=[] баг или так и должно быть и нужны еще какието пляски в AdvancedCustomDraw?
Аватара пользователя
evb87ar
новенький
Сообщения: 52
Зарегистрирован: 18.01.2012 21:08:02
Откуда: г. Архангельск

Сообщение evb87ar »

Вообще, если надо обработать выделение Item, то надо просто повесить проверку на AdvancedCustomDrawItem, где сравнивать AbsoluteIndex и Selected.AbsoluteIndex.
Ну а дальше всё просто.

Я так делал для эффекта отрисовки текста другим цветом при выделении элемента.
Ответить