![]() |
|
||||||||||
|
|||||
|
[+4 25.01.11]
Регистрация: May 2008
Адрес: г. Макеевка
Сообщений: 200
|
Что ж, видно на мою тему все забили. Даже метры.
Посему отвечаю самому себе: var i:Number = 1;
do
{
my_tree.selectedNode = my_tree.getTreeNodeAt(i);
i++;
}
while (i > my_tree.selectedIndex);
trace (i-1);
Правда работает он пока только с закрытыми ветвями. Если же перед алгоритмом вписать код на открытие какой-либо ветки, например обход завершается раньше времени :-( Почему так происходит - мне пока непонятно, но я попытаюсь разобраться. Если моя мелочная проблема кого-нибудь заинтересует, буду рад помощи. |
|
|||||
|
Регистрация: Jul 2005
Сообщений: 135
|
лучше так конечно не делать, но зато работает
|
|
|||||
|
[+4 25.01.11]
Регистрация: May 2008
Адрес: г. Макеевка
Сообщений: 200
|
Спасибо конечно, но не совсем понятно, что этот алгоритм должен делать.
У меня он просто создал 10 новых ветвей в дополнение к моим имеющимся :-( Передо мной же стоит задача написать аглоритм, изменяющий размеры Tree в зависимости от открытия/закрытия веток. alexcon314 предложил сделать это, вычислив количество веток дерева. Над этой подзадачей я сейчас и бьюсь. Выше я приводил свои наработки. Тот алгоритм таки трейсил количество веток, но только если все они закрыты. Я тут придумал ещё кое что: var i:Number = 0;
do
{
i++;
my_tree.selectedIndex = i;
trace (my_tree.getDisplayIndex(my_tree.selectedNode));
}
while (i < 10)
и трейсит индекс выделенной ветви при каждом проходе. Количество проходов я задаю сам, числом в условии while (i < 10). Однако при количестве веток меньшем этого числа (10), одно и тоже число трейсится несколько раз (до i=10). Сейчас меня интересует только одно: как правильно сформировать условие, чтобы при i > количества веток обход прерывался. Последний раз редактировалось vikingcompany; 19.07.2008 в 21:49. |
|
|||||
|
Регистрация: Jul 2005
Сообщений: 135
|
ваш вопрос был в том, как при раскрытии ветки в tree увеличить высоту tree так, чтобы были видны все пункты tree (если не так, то поясните точнее)
мой пример кода увеличивает высоту tree до тех пор пока tree.maxVPosition станет равен нулю, когда это произойдет значит в tree листать нечего, раз нечего листать значит показаны все пункты tree |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Просто уберите из алгоритма kutuzovа кусок про 10 строчек
![]()
__________________
Reality.getBounds(this); |
|
|||||
|
[+4 25.01.11]
Регистрация: May 2008
Адрес: г. Макеевка
Сообщений: 200
|
Цитата:
А для корректной работы этого алгоритма vScrollPolicy должно быть "off" или "on"? А то вертикальный скроллер у меня скрыт... Последний раз редактировалось vikingcompany; 20.07.2008 в 00:11. |
|
|||||
|
Регистрация: Jul 2005
Сообщений: 135
|
Цитата:
ещё для оптимизации времени работы можешь сначала прибавлять по 10 пикселей, потом вычесть 10 и прибавлять уже по одному пикселю |
|
|||||
|
[+4 25.01.11]
Регистрация: May 2008
Адрес: г. Макеевка
Сообщений: 200
|
Должен признать: да, действительно - Вы нашли очень оригинальное решение.
Такой параметр как maxVPosition - просто отличный критерий. Я внедрил его в функцию открытия ветви по клику. Привожу фрагмент кода: function ClickToOpen()
{
this.setIsOpen(this.selectedNode,!(this.getIsOpen(this.selectedNode)));
this.vScrollPolicy = "on";
this.setSize(this.width, 0);
do {this.setSize(this.width, this.height + 1)}
while (this.maxVPosition);
this.vScrollPolicy = "off";
}
this.addEventListener("change", ClickToOpen);
Наряду с ним, я закончил другой алгоритм: function ClickToOpen()
{
var i:Number = 0;
do
{
i++;
this.selectedIndex = i;
}
while (i < 100);
this.setSize(spesifications.width, (this.getDisplayIndex(this.selectedNode) + 1) * 23);
};
this.addEventListener("change", ClickToOpen);
Число проходов 100 - произвольное и на скорость работы не влияет. Коэффициент 23 нашёл методом подбора, для шрифта по умолчанию наиболее оптимальный. Последний раз редактировалось vikingcompany; 21.07.2008 в 10:40. |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|