Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];

Вниз

Кол-во элементов 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.007 c
15-1197210350
Ольга
2007-12-09 17:25
2008.01.13
Где найти наборы иконок


2-1197538417
XerSon
2007-12-13 12:33
2008.01.13
Оптимальный выбор платормы для клент-серверного приложения?


2-1197405115
San1
2007-12-11 23:31
2008.01.13
аргумент функции


15-1197121001
тестмессаге
2007-12-08 16:36
2008.01.13
Что не хватает файлу от ФоксПро?


2-1197880453
Fran
2007-12-17 11:34
2008.01.13
Дата прописью на калмыцком языке





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский