Текущий архив: 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.51 MB
Время: 0.006 c