Доброго всем вечера (равно как и любого другого времени суток)!
Понадобилось мне в TListView в режиме vsReport в некоторых из столбцов выводить данные так, что бы в одной ячейки разные символы выводились разными цветами.
Решил проблему через обработчик события AdvancedCustomDrawSubItem (мне нужно выводить "цветные данные" именно из Subitems) и Canvas.TextOut "посимвольно". Причем "в лоб" проблему решить не удалось: изменение ListView.Canvas.Font.Color ни к чему не приводило. Где-то нашел способ сделать то-же самое обходным путем - через временный "буферный" Canvas (например Bitmap), затем копировать его "в нужное место" Sender.Canvas.CopyRect..
В общем-то основное получилось (
https://yadi.sk/i/JC2R7EDSygJd5), но есть некоторые проблемы.
Проблема 1:
После того, как я что-либо вывожу "свое" на Canvas ListView, у него "слетает" шрифт - меняется тип шрифта, размер и стиль (
https://yadi.sk/i/JC2R7EDSygJd5).
Проблема 2:
Выделение "отслеживаю" так:
if cdsFocused in State
then Buf.Canvas.Brush.Color := GetSysColor(COLOR_HIGHLIGHT)
else Buf.Canvas.Brush.Color := GetSysColor(COLOR_WINDOW);
Вроде бы все хорошо, все работает. До тех пор, пока...
- не появляется hint c подсказкой - подсветка теряется:
https://yadi.sk/i/CyrmOVlxygMru- а если при этом еще и попытаться "снять" выделение, то COLOR_HIGHLIGHT на "вручную" перерисованных ячейках остается:
https://yadi.sk/i/9qYaZwtKygNTz Второй день гуглю, нечего толкового не нашел.
Прошу "наставить на путь истинный" :-), либо подсказать, куда копать.
PS: Использование другого компонента, к сожалению на данный момент, не возможно, придется доламывать этот.