CustomDraw для TListView

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

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

CustomDraw для TListView

Сообщение zub » 10.10.2012 07:35:58

Нужно чуток приукрасить 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 возвращает неправильный рект((
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: CustomDraw для TListView

Сообщение .wOvAN » 10.10.2012 09:53:27

customdraw вообще практически не реализован в ряде компонентов, а прочих лишь частично.
.wOvAN
постоялец
 
Сообщения: 118
Зарегистрирован: 16.04.2010 06:36:12

Re: CustomDraw для TListView

Сообщение evb87ar » 10.10.2012 14:29:21

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

Issue висит на баг-трэкере, но что-то они забили на этот баг.
http://bugs.freepascal.org/view.php?id=22408
Аватара пользователя
evb87ar
новенький
 
Сообщения: 52
Зарегистрирован: 18.01.2012 21:08:02
Откуда: г. Архангельск

Re: CustomDraw для TListView

Сообщение zub » 10.10.2012 17:50:09

Ну уж не работает. Почти работает))
>>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?
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: CustomDraw для TListView

Сообщение evb87ar » 10.10.2012 22:54:14

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

Я так делал для эффекта отрисовки текста другим цветом при выделении элемента.
Аватара пользователя
evb87ar
новенький
 
Сообщения: 52
Зарегистрирован: 18.01.2012 21:08:02
Откуда: г. Архангельск


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 230

Рейтинг@Mail.ru