Тематика фокуса предмета TListView - PullRequest
1 голос
/ 20 августа 2011

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

enter image description here

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

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

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

Спасибо.

1 Ответ

4 голосов
/ 20 августа 2011

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

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

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

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

...