PDA

Просмотр полной версии : после ComboBox-a неработает ничего


zazaza
09.06.2006, 22:35
проблема:

делаете новый файл. В него кладете combobox. Никакого скрипта и имени даже пока ненадо. Рисуете яшик, F8-кнопка. теперь напишем ей
on(release) {trace("pressed");}.

Если один раз опустить combobox, то после етого на кнопке trace неработает если мышью не шевелить.
Ето офигенный баг или какимто образом фиксится??

листенеры change и dropdown._lockroot = false недают ничего.

Nirth
09.06.2006, 23:11
1 ) на этом форуме, запрещается юзать пятерочный синтаксис для версий плеера 6 и выше( а вы юзаете).
2) юзаем вместо него onRelease
3) у меня все работает

//рисуем ComboBox
import mx.controls.ComboBox;
var cb:ComboBox = createClassObject(ComboBox,"ComboBox",2,{dataProvider:["hello","morining","afternoon","evening","hi"]});
//рисуем кнопку
var button:MovieClip = drawSquare(0,0,100,100,this);
button._y = 50;
button.onRelease = function ():Void
{
trace(this);
}
//ComboBox лучше расположить выше кнопки
button.swapDepths(cb);

//метод который рисует кнопку
function drawSquare(x:Number,y:Number,w:Number,h:Number,parent:MovieClip):MovieClip
{
var d:Number = parent.getNextHighestDepth();
var result:MovieClip = parent.createEmptyMovieClip("mc"+Math.round(Math.random()*100)+d,d);
result.beginFill(0xFF6600);
result.moveTo(x,y);
result.lineTo(x,y+h);
result.lineTo(x+w,y+h);
result.lineTo(x+w,y);
result.lineTo(x,y);
result.endFill();
return result;
}


PS для того чтобы расположить компонент программно, он все равно должен быть в библиотеке.

zazaza
09.06.2006, 23:33
неделает никакой разницы.
movieclip.onRelease = function() {trace("aaa");}

все остается точно также. програмно кнопка нарисована или нет неимеет значения, и данный синтаксис тут не причем.
кидаю файл.

Nirth
09.06.2006, 23:35
все остается точно также. програмно кнопка нарисована или нет неимеет значения, и данный синтаксис тут не причем.
кидаю файл.

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

zazaza
09.06.2006, 23:37
кстати, твой скрипт как раз тоже не работает.

zazaza
09.06.2006, 23:42
нажми 5 раз на кнопку - каждый раз будет trace. теперь опусти и закрой dropdown. нажми НЕ ШЕВЕЛЯ мышю еше раз 10 на кнопку. trace будет только первый раз.

KPaul
09.06.2006, 23:49
2 Nirth
И в твоем примере тот же баг. Главная фишка в том чтобы после открытия комво навести на мувик и НЕ смещая мышку ни на пиксель в стороны, просто кликать (мувик перестает "отвечать").

Локализация бага показала что проблема в маскировании, а точнее в маске, котороя создается единожды при первом дроп дауне.

Местоположение локализации примерно 232 строка
функции getDropdown() класса mx.controls.ComboBox
"__dropdown.setMask(mask);"

При комментировании строки клип нормально отвечает, но компонент
естественно работает не корректно... :)
PS Возможно все несколько глубже, буду рад если кто-нибудь раскопает...

Nirth
09.06.2006, 23:51
вообще в флэше мышка не всегдка корректно работает, скажем если убрать кнопку из под мышки, она только на слейдующем движении сообразит что она уже не на кнопке.
Баг увидел, я так понимаю это из за выезжающего меню. В принципе вполне логично, компоненты разрабатывались для работы вместе

//рисуем ComboBox
import mx.controls.*;
var cb:ComboBox = createClassObject(ComboBox,"ComboBox",2,{dataProvider:["hello","morining","afternoon","evening","hi"]});
//рисуем кнопку
var btn:Button = createClassObject(Button,"Button",1,{label:"Click Me"});
btn.move(0,50);
function traceMe(evt:Object):Void {
trace(this);
}
btn.addEventListener("click",traceMe);

Все работает. Внешний вид кнопки так же можно настроить, правда сложнее.

Nirth
09.06.2006, 23:52
2KPaul
править классы компонентов, я бы не назвал мудрым =)

zazaza
10.06.2006, 00:17
но ведь дело не только в компонентах.
если компонент некорректно работает с обычными мувиклипами, ето баг...
у меня сотни всяких драг-дропов мувиклипов, даблкликов на мувиклипы и т.п.

zazaza
10.06.2006, 00:20
просто я думал, мож ктонибудь или макромедиа в таком случае выложили исправленную версию :)

Nirth
10.06.2006, 00:29
Вообщето если честно, эти компоненты были написанны для Flex 1.0-1.5, где вообще все что есть на сцене - компоненты, а в флэш их добавили, скорее как бонус, мое имхо - они должны были предупредить, есть вариант - юзать компоненты из Flash MX их можно достать на adobe exchange (http://www.adobe.com/cfusion/exchange/index.cfm?view=sn110), у меня была ссылка но найти сейчас не могу

zazaza
10.06.2006, 00:31
а можно ли использовать MX-combobox?
чтото у него неработает ни changeHandler ни change listener под player>6

KPaul
10.06.2006, 02:41
При первом приближении в текущей ситуации может помочь
следующий код:
but._focusrect = false;
but.onPress = function(){
Selection.setFocus(this);
trace("pressed");
}

Такая фишка вроде не только с комбо. Дело в том, что компонент не отдает фокус ни кому другому. (Нужно его отобрать) :( Такая проблема оказывается была еще в 2004 году правда преимущественно с TextArea.

Nirth
10.06.2006, 02:47
Flash MX Components for Flash MX 2004 (http://www.adobe.com/cfusion/exchange/index.cfm?view=sn110#view=sn106&viewName=Exchange%20Search%20Details&loc=en_us&authorid=60639501&page=0&scrollPos=0&subcatid=0&snid=sn106&itemnumber=20&extid=1009423&catid=0)
Они кстати весят меньше

Nirth
10.06.2006, 03:06
Насчет событий, компоненты MX имеют на удивление идеотскую событейную модель

var dataProvider:Array = new Array();
dataProvider.push({label:'Lisa',data:1});
dataProvider.push({label:'John',data:2});
dataProvider.push({label:'Aj',data:3});
myComboBox.setDataProvider(dataProvider);
myComboBox.setChangeHandler("onChange",this);
function onChange(component)
{
trace(component.getSelectedItem().label);
}

с другой стороны ComboBox v2 весит 55 килобайт а ComboBox из Flash MX 13 килобайт.

zazaza
10.06.2006, 13:19
дык в том и проблема :) етот скрипт (setChangeHandler) с етим компонентом работает под 6 плеером, а надо 7 как минимум. В нем ни setChangeHandler, ни change listener больше неработают.

zazaza
10.06.2006, 13:31
всем спасибо, буду использовать вариант КPaul, с отбиранием фокуса.

Nirth
10.06.2006, 16:21
у меня это в восьмом работает

msvcrtdll
05.11.2007, 01:14
есть новости по проблеме?