PDA

Просмотр полной версии : Глюк с ComboBox


Vorslov
30.04.2008, 14:33
Проявился неожиданный глюк:
Про создании 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
Косяк здесь:
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
Стало интересно и добился таки нужного эффекта.
Самый простой способ вылечить - это присваивать глубину вручную:
mc2Text.createObject('ComboBox', 'my_cb'+i, i);

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

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

Vorslov
30.04.2008, 19:08
полностью в коде избавься от 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
focusManager.swapDepths(0);
reserved.swapDepths(1);



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