Тема фокуса элемента TListView

При использовании TListView и отключении тем в приложении сфокусированный и выбранный элемент выглядит примерно так:

введите здесь описание изображения

Обратите внимание на оба изображения, где находится треугольник. Нарисованная коробка для предмета не рисуется там, где появляется значок. В TListBox окрашенный элемент заполняет весь выбранный элемент.

Как я могу получить часть значка выбранного элемента для заполнения, как это происходит с текстовой частью?

Я знаю, что TListBox рендерит так, но мне нужно использовать TListView для свойства Data, также TListView лучше обрабатывает значки через TImageList.

Спасибо.


person Community    schedule 20.08.2011    source источник
comment
Используйте пользовательские средства рисования компонента.   -  person Rudy Velthuis    schedule 20.08.2011


Ответы (1)


Вам потребуется использовать события OnCustomDraw TListView. В обработчике событий:

  1. Определить, выбран ли элемент
  2. Определите, сфокусировано ли управление
  3. Нарисуйте соответствующий прямоугольник выбора, если элемент выбран (серый, если элемент управления не выбран, синий, если он выбран)
  4. Нарисуйте текст
  5. Нарисуйте изображение из списка изображений, используя TImageList.Draw

Для этого существуют методы, такие как DrawText и FillRect.

Обратите внимание, что вы можете использовать TListBox вместо TListView, если хотите. Вы указали, что вам нужно свойство Data для элементов в списке, я полагаю, чтобы связать их с вашими реальными объектами модели. Вы можете сделать это со всем, что поддерживает TStrings (например, TListBox.Items), используя TStrings. Объекты.

person Nathanial Woolls    schedule 20.08.2011
comment
+1 Я только что дочитал до конца вашего ответа и вижу, что вторая часть ответа такая же, как и мой более поздний ответ. - person David Heffernan; 20.08.2011