Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Глюк с ComboBox (http://www.flasher.ru/forum/showthread.php?t=111549)

Vorslov 30.04.2008 14:33

Глюк с ComboBox
 
Проявился неожиданный глюк:
Про создании ComboBox

Код:

for(i=0; i<itemArr.length; i++){
...
mc2Text.createObject('ComboBox', 'my_cb'+i, mc2Text.getNextHighestDepth()+itemArr.length-i);
mc2Text['my_cb'+i].setSize(this.w-20, mc2Text['my_cb'+i]._height);
mc2Text['my_cb'+i].move(10, startY+mc2Text['_title_'+i].textHeight+5);
mc2Text['my_cb'+i].addItem({data:0, label:''});
for(j=0; j<itemArr[i][2].length; j++){
      mc2Text['my_cb'+i].addItem({data:itemArr[i][2][j][0], label:itemArr[i][2][j][1]});
}
....
}

создается ComboBox со списком значений, но, список значений при клике на стрелочку "вниз" распахивается по до всеми слоями, тоесть самый нижний и перекрывается всеми слоями над ним :(
Сам ComboBox работает, по нему можно перемещаться кнопками "вниз" / "вверх" и выбирать значения, но, как бы в слепую :(

Может кто сталкивался?

CS3 версия 9.0 проект на AS2 в формате FlashPlayer 9

Vertax 30.04.2008 14:59

Косяк здесь:
Код:

mc2Text.createObject('ComboBox', 'my_cb'+i, mc2Text.getNextHighestDepth()+itemArr.length-i);
Если уж хоца с конца лучше сделай так:
Код:

for(i=itemArr.length - 1; i>-1; i--){
...
mc2Text.createObject('ComboBox', 'my_cb'+i, mc2Text.getNextHighestDepth());


Vorslov 30.04.2008 15:13

Цитата:

Сообщение от Vertax (Сообщение 736424)
Косяк здесь:
Код:

mc2Text.createObject('ComboBox', 'my_cb'+i, mc2Text.getNextHighestDepth()+itemArr.length-i);
Если уж хоца с конца лучше сделай так:
Код:

for(i=itemArr.length - 1; i>-1; i--){
...
mc2Text.createObject('ComboBox', 'my_cb'+i, mc2Text.getNextHighestDepth());


Нет, косяк не там... как вы написали действительно верно, но все же выпадающее меню так и открывается на самом нижнем слое, тоесть тот прямоугольнок, который содердит варианты выбора, который открывается, вот он открывается на самом нижнем слое... :eek:

Vertax 30.04.2008 16:12

Стало интересно и добился таки нужного эффекта.
Самый простой способ вылечить - это присваивать глубину вручную:
Код:

mc2Text.createObject('ComboBox', 'my_cb'+i, i);
Причина проблемы в Help'e на getNextHighestDepth()
Цитата:

Note: If you are using version 2 components, do not use this method. If you place a version 2 component either on the Stage or in the Library, the getNextHighestDepth() method can sometimes return depth 1048676, which is outside the valid range. If you are using version 2 components, you should always use the version 2 components DepthManager class.

Vorslov 30.04.2008 16:26

Цитата:

Сообщение от Vertax (Сообщение 736436)
Стало интересно и добился таки нужного эффекта.
Самый простой способ вылечить - это присваивать глубину вручную:
Код:

mc2Text.createObject('ComboBox', 'my_cb'+i, i);

Пробовал, что то мне это не помогло...
Вообще непонятна даже природа этого глюка... :mad:

olexandr 30.04.2008 18:34

природа глюка - кривость компонентов флеша
у меня такое было несколько месяцев назад.
полностью в коде избавься от getNextHighestDepth() и везде пропиши глубины вручную

Vorslov 30.04.2008 19:08

Цитата:

Сообщение от olexandr (Сообщение 736455)
полностью в коде избавься от getNextHighestDepth() и везде пропиши глубины вручную

:eek: О Ужас! неужели это так только решается? :eek: :eek: :wacko:

Vertax 30.04.2008 20:52

Существут один выход (прада через пятую точку). Нужно перенести focusManager и reserved на более низкую глубину. Пример:
Код:

//Собственно переносим
focusManager.swapDepths(0);
reserved.swapDepths(1);

//А это так, для проверки
for (i = 0; i < 10; i++)
{
        OBJ = _root.createObject("ComboBox", "CB" + i, _root.getNextHighestDepth(), {_y: i * 30});
        OBJ.addItem("AAA");
        OBJ.addItem("AAA");
        OBJ.addItem("AAA");
        OBJ.addItem("AAA");
        OBJ.addItem("AAA");
}

Но этот метод может вызвать еще какие нибудь проблемы (не зря же их на такую глубину засунули). Т.ч. использовать с осторожностью.

Vorslov 04.05.2008 11:39

Цитата:

Сообщение от Vertax (Сообщение 736479)
Код:

focusManager.swapDepths(0);
reserved.swapDepths(1);


Спасибо огромное! помогло!
а где бы почитать про эти загадочные focusManager и reserved?


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

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