Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.023 c
14-12536
volkodav
2004-02-11 23:23
2004.03.05
1C


3-12297
diw
2004-02-06 17:21
2004.03.05
как сжать MDF-файл?


3-12272
ViJen
2004-02-10 10:59
2004.03.05
перехват ошибки bde Table does not exist


3-12227
kors
2004-02-10 12:55
2004.03.05
FB 1.5 CS


1-12383
Talan
2004-02-25 00:24
2004.03.05
Создание объекта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский