TListView Предмет Фокус Тема
При использовании TListView и тем, что темы в приложении отключены, выделенный и выделенный элемент выглядит примерно так:
Обратите внимание на оба изображения, где треугольник. Окрашенная коробка для предмета не рисует там, где появляется значок. В TListBox закрашенный элемент заполняет весь выбранный элемент.
Как я могу получить возможность заполнить часть значка выбранного элемента так же, как это происходит с текстовой частью?
Я знаю, что рендеринг TListBox выполняется таким образом, но мне требуется использование TListView для свойства Data, также TListView лучше обрабатывает значки через TImageList.
Благодарю.
1 ответ
Вам нужно будет использовать события OnCustomDraw TListView. Внутри обработчика событий:
- Определите, выбран ли элемент
- Определите, сфокусирован ли элемент управления
- Нарисуйте соответствующий прямоугольник выбора, если элемент выбран (серый, если элемент управления не выбран, синий, если он выбран)
- Нарисуй текст
- Нарисуйте изображение из списка изображений, используя TImageList.Draw
Существуют методы для выполнения этих задач, такие как DrawText и FillRect.
Обратите внимание, что вы можете использовать TListBox, а не TListView, если хотите. Вы указали, что вам нужно свойство Data для элементов в списке, я бы предположил связать их с вашими фактическими объектами модели. Вы можете сделать это со всем, что поддерживает TStrings (например, TListBox.Items), используя TStrings.Objects.