TListView Предмет Фокус Тема

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

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

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

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

Благодарю.

1 ответ

Решение

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

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

Существуют методы для выполнения этих задач, такие как DrawText и FillRect.

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

Другие вопросы по тегам