Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Общие вопросы > VitrualDrawTree указатели |
Автор: halfhope 12.8.2012, 16:02 | ||
Не подскажете решение моей проблемы?! Есть контакт лист с пользователями, где есть два типа записей(record) "User" и "Group". Каждый User может входить в несколько групп. При создании записи пользователя vdt получает указатель на запись пользователя, при создании дубликата пользователя(в случае если пользователь содержится в нескольких списках) я не знаю как "сказать vdt" чтобы он его дублировал, а не создавал новую запись(т.е. пользователя). Это сказывается при смене параметров записи. Например, Пользователь вошел в сеть, ему нужно поставить статус Online. Я ставлю, но статус присваивается только одному пользователю т.е. его дубликаты имеют каждый свою запись, а нужно чтобы все ссылались на одну запись. Прошу помочь тех, кто работал с vdt.
Вот скрин. ![]() |
Автор: kami 12.8.2012, 16:26 | ||
Как-то так:
Единственное - нужно проверить, будет ли нормально обрабатываться ситуация, когда один нод удален и пошло обращение ко второму, содержащему ссылку на тот же элемент. |
Автор: halfhope 15.8.2012, 12:51 |
Все равно не получается, выложу сорцы. Может я что-то не так делаю?!. Просто первый раз с указателями работаю, но вроде бы тут все просто. Да, спасибо, совсем забыл про обработку такой ситуации. Там в onCreate формы идет добавление. А cList.pas это обертка отрисовки для vdt. |
Автор: kami 15.8.2012, 13:57 | ||
Слишком много смотреть. Куча лишнего, не относящегося к задаче. Показываю свой пример, в котором всё дублируется так, как нужно. Правда, на VirtualStringTree, но сути дела не меняет - все задействованные методы VT относятся к BaseVirtualTree.
|
Автор: halfhope 15.8.2012, 15:32 |
Огромное спасибо, за помощь. Разобрался, все работает. |
Автор: halfhope 15.8.2012, 17:22 |
Ну, этим займется рекурсивный поиск. В обертке допишу override ф-ию, которая при удалении нода будет искать и удалять ноды, указывающие на ту же запись. Пожалуй сейчас этим и займусь. Осталось дело за малым, нужно, чтобы текст не вмещающийся в отрисованный нод сжимался "обрезался". Пожалуй, заранее размеры для текста лучше задавать при onResize, а не при onDrawNode так будет "экономичней" и правильнее. А при отрисовке он просто будет брать данные ширины из уже "готовой к новым размерам" переменной. Спасибо за совет. Очень приятно, что такие люди есть) |