![]() |
Высота компонента Tree
Динамически создаю компонент Tree, который заполняю данными.
При создании, задаю ему конкретный физический размер, достаточный для работы с компонентом лишь в режиме "хочешь развернуть одну ветку, будь любезен свернуть другую". Если же развернуть все ветки, часть из них будет просто не видна :-( Подскажите кто знает: можно ли динамически задавать размер (высоту) компонента Tree, дабы все ветки оставались видны? |
У этого компонента есть VScrollPolicy-свойство, для случаев, когда содержимое не убирается в "окно" компонента.
А так - mytree.setSize(w, h) ; |
Цитата:
Цитата:
А вот как его изменить в соответствии с раскрытыми ветвями ... :umnik2: |
Извините, недопонял ваш вопрос в первом посте.
Собственно, что мешает вычислять высоту по количеству веток? Но, вообще как-то необычно - отказываться от вертикального скролла и менять размер компонента. потому и метода специально такого там нету. |
А как именно узнать количество веток?
|
Посчитать. Сделать обход по дереву с подсчетом нод.
|
Понял. Обход делаю так:
Код:
for (var i:Number = 0; i < 10; i++)При меньшем количестве веток my_tree.getDisplayIndex(my_tree.selectedNode) трейсится как "Nan". Как правильно ввести ограничение, чтобы при Nan обход прекращался? |
Использовать while(){}
|
Это понятно.
А меня куда больше волнует условие: если Код:
while(my_tree.getDisplayIndex(my_tree.selectedNode) = none) {...} |
Как правильно его сформировать?
|
Что ж, видно на мою тему все забили. Даже метры.
Посему отвечаю самому себе: Код:
var i:Number = 1;Правда работает он пока только с закрытыми ветвями. Если же перед алгоритмом вписать код на открытие какой-либо ветки, например Код:
my_tree.setIsOpen(my_tree.getTreeNodeAt(0), true);Почему так происходит - мне пока непонятно, но я попытаюсь разобраться. Если моя мелочная проблема кого-нибудь заинтересует, буду рад помощи. |
лучше так конечно не делать, но зато работает
Код:
for (var k = 0; k<10; k++) { |
Спасибо конечно, но не совсем понятно, что этот алгоритм должен делать.
У меня он просто создал 10 новых ветвей в дополнение к моим имеющимся :-( Передо мной же стоит задача написать аглоритм, изменяющий размеры Tree в зависимости от открытия/закрытия веток. alexcon314 предложил сделать это, вычислив количество веток дерева. Над этой подзадачей я сейчас и бьюсь. Выше я приводил свои наработки. Тот алгоритм таки трейсил количество веток, но только если все они закрыты. Я тут придумал ещё кое что: Код:
var i:Number = 0;и трейсит индекс выделенной ветви при каждом проходе. Количество проходов я задаю сам, числом в условии while (i < 10). Однако при количестве веток меньшем этого числа (10), одно и тоже число трейсится несколько раз (до i=10). Сейчас меня интересует только одно: как правильно сформировать условие, чтобы при i > количества веток обход прерывался. |
ваш вопрос был в том, как при раскрытии ветки в tree увеличить высоту tree так, чтобы были видны все пункты tree (если не так, то поясните точнее)
мой пример кода увеличивает высоту tree до тех пор пока tree.maxVPosition станет равен нулю, когда это произойдет значит в tree листать нечего, раз нечего листать значит показаны все пункты tree |
Просто уберите из алгоритма kutuzovа кусок про 10 строчек :)
|
Цитата:
А для корректной работы этого алгоритма vScrollPolicy должно быть "off" или "on"? А то вертикальный скроллер у меня скрыт... |
Цитата:
ещё для оптимизации времени работы можешь сначала прибавлять по 10 пикселей, потом вычесть 10 и прибавлять уже по одному пикселю |
Должен признать: да, действительно - Вы нашли очень оригинальное решение.
Такой параметр как maxVPosition - просто отличный критерий. Я внедрил его в функцию открытия ветви по клику. Привожу фрагмент кода: Код:
function ClickToOpen()Наряду с ним, я закончил другой алгоритм: Код:
function ClickToOpen()Число проходов 100 - произвольное и на скорость работы не влияет. Коэффициент 23 нашёл методом подбора, для шрифта по умолчанию наиболее оптимальный. |
| Часовой пояс GMT +4, время: 16:57. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.