Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как отрисовать такое в VirtualDrawTree


Автор: GORA 10.1.2008, 17:10
Вот возникла потребность выводить имена пользователей в VirtualTreeView примерно в таком виде:

user posted image

то есть имеются категории (на картинке НС-35 и Друзья), к каждой из которых относятся пользователи, каждому пользователю соответствуют картинки, показывающие определенные состояния, на картинке просто для примера стоят, но расположены они должны быть именно так.

Создал такие типы для хранения пользователей:

Код

type

  PUser = ^TUser;
  TUser = record
    Nick, n: WideString;
    ImageIndex:integer;
    Indent:integer;
    icon1: TIcon;
    icon2: Ticon;
    icon3: Ticon;
    icon4: Ticon;
    Image: Tbitmap;
    Tag:integer;
    State:integer; 
    
  end;

  TCategories = class
   public
    Num_Cat : string;
    Cat_name: string;
    Cat_users: TList;
  end;


Так вот, интуиция подсказывает, что использовать надо VirtualDrawTree, Подскажите пожалуйста как сделать что то подобное

Автор: MetalFan 10.1.2008, 19:04
отрисовываешь ручками, ловишь куда пользователь кликнул. реагируешь.
есть какие-то более точные вопросы?

Автор: GORA 10.1.2008, 19:17
Я более точный вопрос как раз и задал,

Цитата(MetalFan @  10.1.2008,  19:04 Найти цитируемый пост)
отрисовываешь ручками, ловишь куда пользователь кликнул. реагируешь


вот как это отрисовать ручками (примерно)?
И как реагировать на на клик?

Автор: MetalFan 10.1.2008, 19:53
1. определяешь координаты иконки относительно отрисовываемого элемента
2. отрисовываешь иконку
3. к п.1, если есть еще иконки

клик:
1. берешь координаты ректа иконки
2. проверяешь вхождение координат клика с пом PtInRect. делаешь выводы.
3. если есть еще иконки, то к п.1

что еще непонятно? конкретная реализация? попробуй сам, если не получится - спрашивай)

Автор: Sanchezzz 10.1.2008, 19:54
качаещь http://quadr0.pochta.ru/VirtualTreeview/virtualtreeview_pdf.zip help+примеры к компоненту русский все ровно пригодится в нем есть пример Fig 1.5 посмотри более подходит под твои замыслы.

Автор: GORA 11.1.2008, 09:51
MetalFan, Хорошо, попробую сам, и еще вопрос: как разделить отрисовку родительских нодов(категорий) и дочерних(юзеров)?
Ведь в родительских надо будет еще рисовать некое подобие треугольников при открытом ноде и при закрытом.
Если так сделать:
Код

if UsersTree.GetNodeLevel(Node) = 0 then begin...... end;
if UsersTree.GetNodeLevel(Node) = 1 then begin...... end;

Или как то по другому?

Автор: VICTAR 11.1.2008, 11:33
Например проверять Assigned(NodeParent[Node]) если правда, то это НЕ родитель.

Автор: MetalFan 11.1.2008, 12:41
GORA, ну тут еще можно вариант предложить - при загрузке выставлять флаг, что это за элемент... группа или элемент группы

Добавлено через 13 минут и 21 секунду
кстати, треугольник вместо квадратика рисуется в случае ButtonStyle := bsTriangle

Автор: MetalFan 11.1.2008, 13:01
либо можно свои через StateImages

Автор: GORA 11.1.2008, 18:50
Цитата(MetalFan @  11.1.2008,  12:41 Найти цитируемый пост)
кстати, треугольник вместо квадратика рисуется в случае ButtonStyle := bsTriangle

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

Автор: MetalFan 11.1.2008, 18:57
Цитата(GORA @  11.1.2008,  18:50 Найти цитируемый пост)
я правильно понимаю? 

нет. он отрисовывается средствами VT

Автор: GORA 11.1.2008, 19:00
MetalFan, А тогда как получается? я пишу только обработку отрисовки самих элементов группы, а сами группы как отрисовывать?

Автор: MetalFan 11.1.2008, 23:25
как-как? ручками)
тем более, если тебе нужен такой-же треуголничег, как и на картинке, то и его придется ручками рисовать...

Автор: aktuba 12.1.2008, 04:22
Цитата(MetalFan @  12.1.2008,  00:25 Найти цитируемый пост)
тем более, если тебе нужен такой-же треуголничег, как и на картинке, то и его придется ручками рисовать... 

Неа... Можно и VT заставить это делать ;)

Цитата(GORA @  11.1.2008,  20:00 Найти цитируемый пост)
MetalFan, А тогда как получается? я пишу только обработку отрисовки самих элементов группы, а сами группы как отрисовывать? 


Вот же, ответ уже дали:

Цитата(Sanchezzz @  10.1.2008,  20:54 Найти цитируемый пост)
качаещь ссылка help+примеры к компоненту русский все ровно пригодится в нем есть пример Fig 1.5 посмотри более подходит под твои замыслы. 


Автор: MetalFan 12.1.2008, 09:45
Цитата(aktuba @  12.1.2008,  04:22 Найти цитируемый пост)
Можно и VT заставить это делать ;)

как? не нашел возможности изменения цвета треугольника....

Добавлено через 34 секунды
разве что через stateImages

Автор: halfhope 15.8.2012, 18:17
На всякий случай.
Есть отличная документация VirtualTreeView на русском от Garnet (Quadr0), А так же примеры. Поищите на сайте drkb.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)