Форум: "Основная";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];
ВнизА существует ли такое дерево у которого ветки могли бы ссылаться Найти похожие ветки
← →
Кен (2004-02-20 04:51) [0]друг на друга ? При этом с сохранением всей функциональности TreeView.
То есть, хочу, чтобы разные ветки дерева могли ссылаться на одни и теже Childы и работать с ними. И чтобы Parent был не один, а в виде массива всех ссылающихся на этот элемент Parentoв.
Такое дерево удобно, когда много дублирующейся информации. И чем писать к разным веткам одни и теже Childы, проще использовать ссылки на уже созданых детей.
Основная сложность в таком дереве - удаление лишних веток, чтобы не удалить случайно Childы, на которые ссылаются другие ветки, и чтобы не появлялись ничейные дети, у которых нет родителей.
Существует ли компонент для работы с таким видом дерева ? Очень хочу !
← →
Mr. Chel (2004-01-23 13:29) [1]Глянь VirtualTreeView должно подойти
http://www.delphi-gems.com/VirtualTreeview/VT.php
← →
Курдль (2004-01-23 13:35) [2]Пока что лучшие компоненты для подобных дел от "Developer Express". Называются "Quantum Grid". Включают в себя, деревья и гриды, в том числе DB-ориентированные, а т.ж. уйму визуальных компонентов.
Стоят не дорого - около 600 баксов.
← →
Amoeba (2004-02-20 18:12) [3]Не уверен, что рекомендованные компоненты способны на это... Сомневаюсь, что вообще таковые готовые существуют...
← →
MBo (2004-02-20 18:17) [4]Это не деревья, а графы.
← →
Курдль (2004-02-20 18:20) [5]
> Не уверен, что рекомендованные компоненты способны на это...
>
Естественно, этого не может быть "потому, что не может быть никогда". :)
Отношение "многие-ко-многим" в гридах еще никто не додумался реализовать :)
Однако, грамотно написанный запрос может решить все проблемы и без постороннего вмешательства (О! Шайтан-арба!) выстроиться, как надо, на любом DBTree...
← →
Mystic (2004-02-20 18:27) [6]Трапеция это параллелограмм, у которого две стороны не параллельны...
Что тебе мешает использовать виртуальный TreeView, а данные хранить в своей сетевой структуре?
← →
Кен (2004-02-21 02:22) [7]
> Mr. Chel (23.01.04 13:29) [1]
> Глянь VirtualTreeView должно подойти
> http://www.delphi-gems.com/VirtualTreeview/VT.php
Поставил скачиваться.
> MBo © (20.02.04 18:17) [4]
> Это не деревья, а графы.
Что за графы такие ? Они есть в Дельфи 7 ? О них есть какие нибудь статьи для тех, кто не в курсе ?
> Mystic © (20.02.04 18:27) [6]
> Трапеция это параллелограмм, у которого две стороны не параллельны...
>
> Что тебе мешает использовать виртуальный TreeView, а данные
> хранить в своей сетевой структуре?
То, что я люблю простые решения и разделения труда.
Один написал такое хитрое дерево со всеми удобствами, а все остальные пользуются и не заморачиваются на всякие виртуальности и сетевые структуры.
Плюс возможность отдельно дорабатывать, оптимизировать, наворачивать код дерева и код программ которые его используют.
А когда всё в кучу свалено, то потом не разберёшься.
← →
ЮЮ (2004-02-21 03:41) [8]>Курдль © (23.01.04 13:35) [2] Отношение "многие-ко-многим" в гридах еще никто не додумался реализовать :)
Ну это ты зря. Более того, некоторые даже множественное наследование реализовали :-)
>Один написал такое хитрое дерево со всеми удобствами, а все остальные пользуются и не заморачиваются
Так оно и есть, только в рамках одного коллектива (предприятия), т.к. просто так отдавать в чужие руки труд целого коллектива, ни у кого рука не поднимется
А в твоём случае (в случае любителя TreeView) вообще все делается элементарно: в памяти строится виртуальная модель твоих данных, к построению и удалению элементов которых TreeView не имеет никакого отношения, а в TreeViewNode.Data указываешь ссылку на элемент этой структуры. И все. Элемент данных один, а ссылок сколь хочешь.
← →
Кен (2004-02-22 01:58) [9]
> ЮЮ © (21.02.04 03:41) [8]
> Так оно и есть, только в рамках одного коллектива (предприятия),
> т.к. просто так отдавать в чужие руки труд целого коллектива,
> ни у кого рука не поднимется
Во времена кражи исходников Виндос и Халф Лайфа 2, зажимать какое-то жалкое дерево - несолидно.
> А в твоём случае (в случае любителя TreeView) вообще все
> делается элементарно: в памяти строится виртуальная модель
> твоих данных, к построению и удалению элементов которых
> TreeView не имеет никакого отношения
Нет имеет. Мои данные надо вообще оставить в покое, потому, что речь не о них, а о связях между ними. Мне нужен удобный механизм для работы с этими связями. Связи простейшие, в виде массива родителей и массива детей, для каждого элемента моих данных. Нужно удобное удаление и удобный доступ. Вот и всё. Как это реализовать ?
> Mr. Chel (23.01.04 13:29) [1]
> Глянь VirtualTreeView должно подойти
> http://www.delphi-gems.com/VirtualTreeview/VT.php
Глянул. Там мультипэрента вроде бы нету. Или я не нашёл ?
> Курдль © (23.01.04 13:35) [2]
> Пока что лучшие компоненты для подобных дел от "Developer
> Express". Называются "Quantum Grid". Включают в себя, деревья
> и гриды, в том числе DB-ориентированные, а т.ж. уйму визуальных
> компонентов.
> Стоят не дорого - около 600 баксов.
Это вот это : http://www.devexpress.com/ ? Там точно есть то что я хочу ?
← →
jack128 (2004-02-22 10:40) [10]
> Глянул. Там мультипэрента вроде бы нету. Или я не нашёл
>
естственно нету - это ж ДЕРЕВО!!!! Напомню, под деревом тут подрузамевают структуру реализую отношение один ко многим(либо визуальный компонент отображающий такие отношения).
Вообще как, то что ты хочешь, должно выглядить???
← →
Думкин (2004-02-22 11:46) [11]> [6] Mystic © (20.02.04 18:27)
Как однажды пошутил МВо:
"Эллипс - это круг вписанный в квадрат 3 на 4".
← →
Юрий Зотов (2004-02-22 12:08) [12]> Mystic © (20.02.04 18:27) [6]
> Думкин © (22.02.04 11:46) [11]
Да, тут нужен Rouse_ с его "Антологией"...
"Что за графы такие? Они есть в Дельфи 7?"
"...я люблю простые решения и разделения труда. Один написал такое хитрое дерево со всеми удобствами, а все остальные пользуются и не заморачиваются..."
"Во времена кражи исходников Виндос и Халф Лайфа 2, зажимать какое-то жалкое дерево - несолидно".
← →
Кен (2004-02-23 01:41) [13]
> jack128 © (22.02.04 10:40) [10]
> Вообще как, то что ты хочешь, должно выглядить???
Обычное дерево с тем отличием, что в разных его ветках может показываться одно и тоже ( если пэрентов много ).
> естственно нету - это ж ДЕРЕВО!!!! Напомню, под деревом
> тут подрузамевают структуру реализую отношение один ко многим.
Один - это часный случай многих. :) Значит дерево - это часный случай чего-то другого. Вопрос чего ? И какой компонент позволяет удобно с этим работать.
← →
nikkie (2004-02-23 02:42) [14]>Там мультипэрента вроде бы нету.
тебе этого и не надо.
>в разных его ветках может показываться одно и тоже
вот именно для этого отлично подойдет TVirtualTreeView.
в узле дерева надо хранить ссылку на твой блок данных.
несколько разных узлов могут ссылаться на один и тот же блок данных.
текст, который будет показан в дереве заполняется в событии OnGetText.
в обработчике этого события ты вытаскиваешь свои данные по ссылке, сохраненной в Node.Data. автоматически получаются идентичные узлы в дереве.
← →
Alex Konshin (2004-02-23 03:29) [15]Ну есть у меня такое дерево, классификатор товаров на прежней питерской работе на нем построен.
Но тебе не дам - не в коня корм, тебе дашь, а потом еще и объяснять замучаешься.
Будешь красть исходники?
← →
Кен (2004-02-23 06:01) [16]
> nikkie © (23.02.04 02:42) [14]
> >Там мультипэрента вроде бы нету.
> тебе этого и не надо.
>
> >в разных его ветках может показываться одно и тоже
> вот именно для этого отлично подойдет TVirtualTreeView.
> в узле дерева надо хранить ссылку на твой блок данных.
А как я по данным определю все узлы которые на них ссылаются ? Перебирать всё дерево от начала до конца каждый раз ?
Ведь удалять то нельзя те данные, на которые ещё кто то продолжает ссылаться.
> Alex Konshin © (23.02.04 03:29) [15]
> Будешь красть исходники?
Красть не буду. Только копировать. А как ещё можно пользоваться исходинками не копируя ?
← →
Alex Konshin (2004-02-23 06:14) [17]Да пожайлуйста. Но тебе - только за деньги.
← →
nikkie (2004-02-23 12:32) [18]>А как я по данным определю все узлы которые на них ссылаются ?
TTreeView & TVirtualTreeView - визуальные компоненты. предназначены для визуального отображения твоих данных. в них и не должно быть наворочено алгоритмов обработки структур данных. иначе получится, во-первых,
А когда всё в кучу свалено, то потом не разберёшься.
а во-вторых, область применения уже - всем нужны разные структуры данных.
так что если ты надеялся с помощью TTreeView решить свою проблему "Как, в чём хранить связи между данными?", то зря. в той ветке тебе уже сказали, я могу лишь повторить, что тебе надо разбираться со структурами данных. начать можно отсюда:
http://algolist.manual.ru/ds/basic/
← →
Курдль (2004-02-24 17:22) [19]Я не пойму, зачем вы все путаете причинные места со следственными органами?
TreeView и пр. визуальные компоненты - лишь средства отображения.
Создайте разумную структуру данных в памяти, а визуальному компоненту лишь подсунте "видимую часть айсберга".
Например, для решения проблемы, изложенной вначале топика, можно всего-навсего передать DB-ориентированному TreeView след. пример:
1. Name = Запись_1, ID = 1, ID_PARENT = NULL;
2. Name = Запись_2, ID = 2, ID_PARENT = 1;
3. Name = Запись_3, ID = 3, ID_PARENT = NULL;
4. Name = Запись_2, ID = 4, ID_PARENT = 3;
В результате нарисуется дерево с 2-мя узлами (1 и 3) и 2-мя идентичными ветвями (2, 4).
← →
Кен (2004-02-25 04:36) [20]Удалено модератором
Примечание: За очередные грубые нападки на модератора 7 дней RO
← →
ЮЮ (2004-02-25 09:07) [21]TSuperCrossedObject = class
private
FParent: TObject;
FChildren: TObjectArray;
FIndirectChildren: TObjectArray;
FIndirectParents: TObjectArray;
public
function AddChild(Child: TObject): integer;
procedure InsertChild(Child: TObject; Idx: integer);
procedure MoveChild(FromIdx, ToIdx: integer);
function RemoveChild(Idx: integer): TObject;
function AddIndirectChild(Child: TObject): integer;
procedure InsertIndirectChild(Child: TObject; Idx: integer);
procedure MoveIndirectChild(FromIdx, ToIdx: integer);
function RemoveIndirectChild(Idx: integer): TObject;
end;
где кроме прямых связей владения поддерживаем ссылочные (Indirect) связи
в Destructor-е необходимо "разорвать" ссылочные связи перед уничтожением объекта
← →
nikkie (2004-02-25 09:10) [22]>Кен
неужели тебе самому приятно в роли клоуна выступать?
если тебе нужны хеши, заведи ветку про них, может посоветуют реализацию.
TTreeView здесь не причем, это ты понимаешь?
>какими такие могут быть разные структуры данных ?
ну если ты уже знаешь умное слово хеш, то должен знать и другие умные слова - 1-направленный список, 2-направленный список, очередь, стек. все это - элементарные разные структуры данных. причем это только кирпичики, из которых под конкретную задачу можно построить и более сложные модели.
← →
Erik (2004-02-25 09:37) [23]Удалено модератором
Примечание: Не стоит решать за модератора ;)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.189 c