Показать кнопку расширения TTreeViewItem

У меня есть приложение FireMonkey, которое показывает список элементов в TTreeView. Некоторые элементы представляют собой листовые объекты, другие представляют собой контейнеры. Моя идея не в том, чтобы предварительно загружать все дерево сразу. Я хочу добавлять вложенные элементы в контейнеры только после того, как пользователь нажмет на определенный элемент контейнера.

Для этого мне нужно показать пользователю, что соответствующий элемент является контейнером:

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

Есть ли способ показать расширитель определенного элемента TTreeViewItem без добавления каких-либо подэлементов с использованием стилей, RTTI и т. д.?

Я использую Delphi XE7.


person iPath ツ    schedule 11.11.2014    source источник
comment
Я всегда использую трюк с добавлением фиктивного элемента, затем перехватываю событие, когда пользователь расширяет узел, проверяю этот фиктивный элемент, удаляю его и заполняю реальные элементы. Отлично работает для просмотра каталогов на компьютере, но я никогда раньше не использовал его в Firemonkey.   -  person Jerry Dodge    schedule 12.11.2014
comment
@JerryDodge, сделай свой комментарий ответом. Кажется, это приемлемое решение :)   -  person iPath ツ    schedule 13.11.2014


Ответы (1)


Существует распространенный трюк с использованием «фиктивного» узла внутри каждого нерасширенного узла. Каждый узел, в котором есть элементы, будет иметь только пустой дочерний узел. Когда пользователь расширяет этот узел, проверьте этот фиктивный узел. Если он есть, удалите его, а затем заполните настоящие элементы. Я не совсем уверен, насколько похоже древовидное представление в Firemonkey и VCL, но концепция должна работать одинаково.

person Jerry Dodge    schedule 13.11.2014