Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.13;
Скачать: CL | DM;

Вниз

Кол-во элементов TreeView   Найти похожие ветки 

 
account1024 ©   (2007-12-12 18:08) [0]

К сожалению я плохо обьясняю. Но надеюсь вы меня поймете.

Допустим выделен к.н. элемент(X1) на 3 уровне древа, как узнать его Абсолютный индекс но начиная не с начала всего дерева, а с предка X1 элемента 0 уровня.

AbsoluteIndex не подходит т.к. он начинает отсчет с начала всего списка


 
Юрий Зотов ©   (2007-12-12 18:14) [1]

> Абсолютный индекс но начиная не с начала всего дерева
> а с предка X1 элемента 0 уровня.

Тогда для начала бы надо уточнить - что такое абсолютный индекс в Вашем понимании?


 
account1024 ©   (2007-12-12 18:25) [2]


> Юрий Зотов

Нарисую:

--Элемент1(У0)
    |-Элемент1(У2)
        |-Элемент1(У3)
        |-Элемент2(У3)
        |-Элемент3(У3)

В моем понимании (или то что я хочу):
АбсолютныйИндекс=Индекс(Элемнта3(У3))+Индекс(Элемнта1(У2))+Индекс(Элемнта1(У0))


 
account1024 ©   (2007-12-12 18:31) [3]

Кажется я опять загнался. Индекс(Элемента1(У0)) - мне не нужен.
АбсолютныйИндекс=Индекс(Элемнта3(У3))+Индекс(Элемнта1(У2))


 
Юрий Зотов ©   (2007-12-12 18:48) [4]

> account1024 ©   (12.12.07 18:31) [3]

Хорошо, пусть будет так. Но опять требуется уточнение. Вот Вы пишете:
АбсолютныйИндекс=Индекс(Элемнта3(У3))+Индекс(Элемнта1(У2))

И возникает два вопроса:
1. Абсолютный индекс какого элемента стоит в левой части?
2. Что такое "Индекс элемента", который входит в правую часть?


 
trubin ©   (2007-12-12 18:50) [5]

элемент(X1).AbsoluteIndex - предок(x1).AbsoluteIndex

так что-ли, если я правильно понял задачу?


 
account1024 ©   (2007-12-12 18:52) [6]

Вот, посидел и что получилось (может отсюда все яснее станет):

 function GetAbsIndx( ndNode: TTreeNode; var iCurIndx: integer ): integer;
 begin
   iCurIndx:= ndNode.Index + iCurIndx;
   if ndNode.Level = 0 then Result:= iCurIndx
   else                     Result:= GetAbsIndx( ndNode.Parent, iCurIndx );
 end;


 
trubin ©   (2007-12-12 18:56) [7]

Если иерархический уровень узла, то это его св-во "Level"


 
account1024 ©   (2007-12-12 18:59) [8]

Еще один рисунок (кажется я сам начинаю доходить до того что мне в конечном счете нужно):

--Элемент1(У0)
    |-Элемент1(У2)
    |   |-Элемент1(У3)
    |   |-Элемент2(У3)
    |   |-Элемент3(У3)
    |
    |-Элемент2(У2)
    |   |-Элемент1(У3)
    |   |-Элемент2(У3)
    |   |-Элемент3(У3)
    |
    |-Элемент3(У2)
        |-Элемент1(У3)
        |-Элемент2(У3)
        |-Элемент3(У3)!!!

ПРИМЕР: результат = Индекс_Элемент3(У3)+Кол-во_Элементов_в_Элементе2(У3)+Кол-во_Элементов_в_Элементе1(У3)


 
account1024 ©   (2007-12-12 19:01) [9]

Я щас застрелюсь - нужно ввести возможность редактировать сообщения!!!

ПРИМЕР (правильный):
результат = Индекс_Элемент3(У3)+Кол-во_Элементов_в_Элементе2(У2)+Кол-во_Элементов_в_Элементе1(У2)


 
Юрий Зотов ©   (2007-12-12 19:05) [10]

> account1024 ©   (12.12.07 18:52) [6]

Я не зря задаю вопросы - это вопросы наводящие. Ведь Вы (и никто другой) не сможете решить эту задачу раньше, чем сформулируете для себя, что такое абсолютный индекс узла и просто индекс узла, чем они отличаются, откуда они берутся, обязаны ли быть уникальными, если "да" - то в какой области... и т.п.


 
Юрий Зотов ©   (2007-12-12 19:09) [11]

результат = Индекс_Элемент3(У3)+...

Все те же вопросы:
1. Результат для КАКОГО узла?
2. "Индекс_Элемент3" - это ЧТО?


 
account1024 ©   (2007-12-12 19:12) [12]


> Юрий Зотов

Это я на себя ругаюсь, не воспринимайте это на свой счет :)
В этой задаче, как я понимаю не обойтись без рекурсивного перебора всех элементов второго уровня.

Т.е. Находим кол-во элементов 3го уровня в каждом элементе 2го уровня (до того элемента 2го уровня в котором находится элемент для которого мы находим его т.н. абсолютный индекс) и прибавляем индекс нашего элемента 3го уровня.


 
trubin ©   (2007-12-12 19:22) [13]


> Т.е. Находим кол-во элементов 3го уровня в каждом элементе
> 2го уровня (до того элемента 2го уровня в котором находится
> элемент для которого мы находим его т.н. абсолютный индекс)
> и прибавляем индекс нашего элемента 3го уровня.


Так может все таки: из значения св-ва AbsoluteIndex выделенного элемента вычитать значение св-ва AbsoluteIndex интересующего тебя предка этого выделенного элемента, как я постил в [5].

Видимо та трава которую я курю сильно не совместима с твоей травкой :)))


 
account1024 ©   (2007-12-12 19:24) [14]


> trubin

Спасибо!!!! :D

Нет, вот как раз трава то и кончилась :)))


 
Юрий Зотов ©   (2007-12-12 19:26) [15]

> account1024 ©   (12.12.07 19:12) [12]

> В этой задаче

Да забудьте Вы про задачу. Она решится сама собой, как только Вы ответите на вопросы. И не решится никак, пока не ответите.

1. Что такое индекс элемента?
2. Его значение как-то назначается или получается как-то еще?
3. Должен ли он быть уникальным и если да, то внутри какой области?

И те же 3 вопроса для абсолютного индекса элемента.


 
account1024 ©   (2007-12-12 19:41) [16]

1,2,3) TreeNode.Selected.Index
Как же мне еще это обьяснить?
Как есть:
Формируется структура, во время работы программы:

--Файл
      |-Строка_из_файла1
      |    |-Слово_из_строки2
      |    |-Слово_из_строкиM
      |-Строка_из_файлаM+1
      |    |-Слово_из_строкиM+2
      |    |-Слово_из_строкиN
      |-Строка_из_файлаN+1
           |-Слово_из_строкиN+2
           |-Слово_из_строкиN

Файлов загружается несколько.
Когда я выделяю слово_из_строкиХ, то должен получить индекс строки начиная с строка_из_файла1.


 
account1024 ©   (2007-12-12 19:50) [17]

Скоро меня за спам выкинут :-(

--Файл1
     |-Строка1_из_файла1
     |    |-строка2=(M)
     |    
     |-Строка(M)+1_из_файла1
          |-строка(M)+2

Когда я выделяю слово_из_строки(M)+2, то должен получить индекс строки начиная с строкаN_из_файла1.

Никогда себя так не чествовал, вроде знаю чего хочу а обьяснить не могу :(((


 
account1024 ©   (2007-12-12 19:54) [18]

Нашел решение:
Node.AbsoluteIndex - Node.Parent.Parent.AbsoluteIndex
2-а parent"a - статично, но смысл уже ясен!!!

Всем спасибо за терпение и помощь!!!


 
Юрий Зотов ©   (2007-12-12 20:06) [19]

Так, вопрос потихоньку проясняется. Итак:

Индекс элемента - это его порядковый номер в списке элементов его родительского элемента. Он уникален в пределах этого списка.

Абсолютный индекс элемента - это его порядковый номер в плоском списке всех элементов дерева. Он уникален в пределах всего дерева.

Попробуем идти дальше. Пусть мы имеем вот такое дерево (в узлах стоят значения их индексов: абсолютный и через запятую просто индекс):

--0, 0
     |-1, 0
     |     |-4, 0
     |     |-5, 1
     |
     |-2, 1
     |     |-6, 0
     |     |-7, 1
     |
     |-3, 2
           |-8, 0
           |-9, 1

Вопрос - укажите, какое значение нужного Вам индекса должны иметь все узлы этого дерева.


 
Юрий Зотов ©   (2007-12-12 20:09) [20]

> account1024 ©   (12.12.07 19:54) [18]

А как быть с корневым элементом и его дочерними элементами? Для них Parent.Parent.AbsoluteIndex не прокатит.


 
trubin ©   (2007-12-12 20:18) [21]


> А как быть с корневым элементом и его дочерними элементами?
>  Для них Parent.Parent.AbsoluteIndex не прокатит.


В цикле искать Parent нужного уровня, например исходя из св-ва Level


 
account1024 ©   (2007-12-12 20:21) [22]

Вот мое решение:

function GetAbsIndx( ndNode: TTreeNode; iEndLevel: integer ): integer;
 var
   iStartLevel:  integer;
   iCounter:     integer;
   iFirstIndx:   integer;
 begin
   iFirstIndx:= ndNode.AbsoluteIndex;
   Result:= iFirstIndx;

   // т.к. ниже 0-го нода родителя нет...
   if iEndLevel < 1 then exit;

   iStartLevel:= ndNode.Level;
   for iCounter:= iStartLevel downto iEndLevel do
     ndNode:= ndNode.Parent;

   Result:= iFirstIndx - ndNode.AbsoluteIndex;
 end;

Поправьте если что не так...


 
Johnmen ©   (2007-12-12 20:58) [23]

Забавная ветка :)
Автор просто не читает, что ему говорят, а просто тихо, сам с собою... Мозговой нарциссизм (или онанизм?) какой-то :)


 
trubin ©   (2007-12-12 21:05) [24]


> Я не зря задаю вопросы - это вопросы наводящие. Ведь Вы
> (и никто другой) не сможете решить эту задачу раньше, чем
> сформулируете для себя, что такое абсолютный индекс узла
> и просто индекс узла, чем они отличаются, откуда они берутся,
>  обязаны ли быть уникальными, если "да" - то в какой области.
> .. и т.п.


Согласен, "правильная постановка задачи - половина успеха"

(с) - не помню чей  :))



Страницы: 1 вся ветка

Текущий архив: 2008.01.13;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.02 c
11-1182446007
Vladimir Kladov
2007-06-21 21:13
2008.01.13
Версия 2.69


2-1197377079
Бэтман
2007-12-11 15:44
2008.01.13
Проблема с кодировкой


3-1188898377
novill
2007-09-04 13:32
2008.01.13
IB 7.1 Что означает COMMIT RETAIN ?


15-1196969820
Бедняжка
2007-12-06 22:37
2008.01.13
Друзья нужна помощь


15-1196713425
Rouse_
2007-12-03 23:23
2008.01.13
Выдвигаем кандидатов на знак "Мастер Дельфи"