Просмотр полной версии : Глюк с 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
Косяк здесь:
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());
Косяк здесь:
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:
Стало интересно и добился таки нужного эффекта.
Самый простой способ вылечить - это присваивать глубину вручную:
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.
Стало интересно и добился таки нужного эффекта.
Самый простой способ вылечить - это присваивать глубину вручную:
mc2Text.createObject('ComboBox', 'my_cb'+i, i);
Пробовал, что то мне это не помогло...
Вообще непонятна даже природа этого глюка... :mad:
olexandr
30.04.2008, 18:34
природа глюка - кривость компонентов флеша
у меня такое было несколько месяцев назад.
полностью в коде избавься от getNextHighestDepth() и везде пропиши глубины вручную
полностью в коде избавься от getNextHighestDepth() и везде пропиши глубины вручную
:eek: О Ужас! неужели это так только решается? :eek: :eek: :wacko:
Существут один выход (прада через пятую точку). Нужно перенести 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");
}
Но этот метод может вызвать еще какие нибудь проблемы (не зря же их на такую глубину засунули). Т.ч. использовать с осторожностью.
focusManager.swapDepths(0);
reserved.swapDepths(1);
Спасибо огромное! помогло!
а где бы почитать про эти загадочные focusManager и reserved?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.