Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.07.2008, 08:49
vikingcompany вне форума Посмотреть профиль Отправить личное сообщение для vikingcompany Найти все сообщения от vikingcompany
  № 1  
Ответить с цитированием
vikingcompany
 
Аватар для vikingcompany

Регистрация: May 2008
Адрес: г. Макеевка
Сообщений: 200
Что ж, видно на мою тему все забили. Даже метры.
Посему отвечаю самому себе:
Код:
var i:Number = 1;
do
 {
 my_tree.selectedNode = my_tree.getTreeNodeAt(i);
 i++;
 }
while (i > my_tree.selectedIndex);
trace (i-1);
Данный алгоритм трейсит количесво веток в дереве.
Правда работает он пока только с закрытыми ветвями.

Если же перед алгоритмом вписать код на открытие какой-либо ветки, например
Код:
my_tree.setIsOpen(my_tree.getTreeNodeAt(0), true);
обход завершается раньше времени :-(
Почему так происходит - мне пока непонятно, но я попытаюсь разобраться.

Если моя мелочная проблема кого-нибудь заинтересует, буду рад помощи.

Старый 19.07.2008, 20:06
kutuzov вне форума Посмотреть профиль Отправить личное сообщение для kutuzov Найти все сообщения от kutuzov
  № 2  
Ответить с цитированием
kutuzov
 
Аватар для kutuzov

Регистрация: Jul 2005
Сообщений: 135
лучше так конечно не делать, но зато работает
Код:
for (var k = 0; k<10; k++) {
	tree.addItem("qwe");
}
tree.doLater(this,"delay");
function delay() {
	while (tree.maxVPosition) {
		tree.setSize(tree.width, tree.height+1);
	}
}

Старый 19.07.2008, 21:46
vikingcompany вне форума Посмотреть профиль Отправить личное сообщение для vikingcompany Найти все сообщения от vikingcompany
  № 3  
Ответить с цитированием
vikingcompany
 
Аватар для vikingcompany

Регистрация: 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.
Старый 19.07.2008, 22:14
kutuzov вне форума Посмотреть профиль Отправить личное сообщение для kutuzov Найти все сообщения от kutuzov
  № 4  
Ответить с цитированием
kutuzov
 
Аватар для kutuzov

Регистрация: Jul 2005
Сообщений: 135
ваш вопрос был в том, как при раскрытии ветки в tree увеличить высоту tree так, чтобы были видны все пункты tree (если не так, то поясните точнее)

мой пример кода увеличивает высоту tree до тех пор пока tree.maxVPosition станет равен нулю, когда это произойдет значит в tree листать нечего, раз нечего листать значит показаны все пункты tree

Старый 20.07.2008, 00:08
vikingcompany вне форума Посмотреть профиль Отправить личное сообщение для vikingcompany Найти все сообщения от vikingcompany
  № 5  
Ответить с цитированием
vikingcompany
 
Аватар для vikingcompany

Регистрация: May 2008
Адрес: г. Макеевка
Сообщений: 200
Цитата:
Сообщение от kutuzov Посмотреть сообщение
мой пример кода увеличивает высоту tree до тех пор пока tree.maxVPosition станет равен нулю, когда это произойдет значит в tree листать нечего, раз нечего листать значит показаны все пункты tree
Интересно, интересно ... Ща попробую.
А для корректной работы этого алгоритма vScrollPolicy должно быть "off" или "on"?
А то вертикальный скроллер у меня скрыт...


Последний раз редактировалось vikingcompany; 20.07.2008 в 00:11.
Старый 20.07.2008, 00:33
kutuzov вне форума Посмотреть профиль Отправить личное сообщение для kutuzov Найти все сообщения от kutuzov
  № 6  
Ответить с цитированием
kutuzov
 
Аватар для kutuzov

Регистрация: Jul 2005
Сообщений: 135
Цитата:
Сообщение от vikingcompany Посмотреть сообщение
А для корректной работы этого алгоритма vScrollPolicy должно быть "off" или "on"?
есть только один способ узнать наверняка (с) kutuzov

ещё для оптимизации времени работы можешь сначала прибавлять по 10 пикселей, потом вычесть 10 и прибавлять уже по одному пикселю

Старый 19.07.2008, 23:18
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Просто уберите из алгоритма kutuzovа кусок про 10 строчек
__________________
Reality.getBounds(this);

Старый 21.07.2008, 10:36
vikingcompany вне форума Посмотреть профиль Отправить личное сообщение для vikingcompany Найти все сообщения от vikingcompany
  № 8  
Ответить с цитированием
vikingcompany
 
Аватар для vikingcompany

Регистрация: 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, время: 14:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 14:12.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.