PDA

Просмотр полной версии : ComboBox и прокрутка броузера


Modest
20.04.2007, 21:14
столкнулся с проблемой:
есть флеш высота его меняется в зависимости от действий, соотвественно в броузере появляется полоса прокрутки. Если не использовать комбобокс покрутка мышью страницы работает нормально, как только добавляю комбобокс прокрутка работает только один раз при первой загрузке (как только фокус перемещается на флеш колесо перестает работать как прокрутка страницы. )

Есть идеи как решить проблему? (Писать свой комбобокс не предлагать.)

etc
20.04.2007, 21:19
Убить обработчик onMouseWheel (хаком).

Modest
20.04.2007, 21:35
Убить обработчик onMouseWheel (хаком).
а можно пояснить что значит хаком?

etc
20.04.2007, 22:45
Это значит в рантайме изменить поведение комбобокса.

Modest
21.04.2007, 15:04
спасибо за ответы, но честно говоря как я не ковырялся так и не смог решить эту проблему, можно попросить конкретизировать, если не трудно, что именно надо сделать с объектом, перебрал вроде все возможные варианты (((

etc
21.04.2007, 15:58
Я думаю, что ломать придется долго и нудно, потому как подписка на onMouseWheel наверняка засунута очень далеко. Т.е. вывод: либо потратить довольно значительное время на разбор работы компонентов, либо писать свой.

Modest
21.04.2007, 16:08
Я думаю, что ломать придется долго и нудно, потому как подписка на onMouseWheel наверняка засунута очень далеко. Т.е. вывод: либо потратить довольно значительное время на разбор работы компонентов, либо писать свой.

да видимо писать придется свой, разбирать я ее пытался но там черт ногу сломит (((

etc
21.04.2007, 16:22
Ну хак оказался простым. Возможно, сработает:

_global.__SVMouseWheelManager = {};

Modest
21.04.2007, 18:00
пробовал не оказывает никакого действия, действие с колесом мышы встречается только в ScrollView.as, и то там пара строк кода... а такие последствия ))

wvxvw
21.04.2007, 18:02
вот, еще вариант:
intrinsic class mx.core.ScrollView extends mx.core.View
{
public var MASK_DEPTH:Number;
public function ScrollView();
public var __hPosition:Number;
public var __hScrollPolicy:String;
public var __maxHPosition:Number;
public function __onMouseWheel(delta:Number, scrollTarget:MovieClip):Void;
- исходник комбобокса. Просто закомментить выделенную строчку и перекомпилировать компонент.

etc
21.04.2007, 18:23
wvxvw, это ничего не даст.

Я бы ещё попробовал SystemManager отписать от Mouse (чревато).

wvxvw
21.04.2007, 18:29
почему же, у меня перестал скролится по движеню колесика? Или не этого надо добиться?

etc
21.04.2007, 18:35
При наличии компонентов перестает работать скролл браузера и, судя по всему, при удалении обработчика продолжает неработать. На мой взгляд, лучше предотвратить подписку, чем убивать сам обработчик.

Modest
21.04.2007, 20:01
тупик (((

etc
21.04.2007, 20:10
Попробуй ещё:
Mouse.removeListener(mx.managers.SystemManager);

Modest
21.04.2007, 20:25
так действительно появляется скролл с нереальными правда тормозами и до тех пор пока не воспользуешься комбобоксом.. после этого умирает

etc
21.04.2007, 20:30
Значит там что-то ещё подписывается на скролл.
Я даже знаю, что именно.

Можно ещё попробовать:

mx.controls.ComboBox.prototype.getDropdown = function() {
if (this.initializing) {
return undefined;
}
if (!this.hasDropdown()) {
var o = new Object();
o.styleName = this;
if (this.dropdownBorderStyle != undefined) {
o.borderStyle = this.dropdownBorderStyle;
}
o._visible = false;
this.__dropdown = mx.managers.PopUpManager.createPopUp(this, mx.controls.List, false, o, false);
this.__dropdown.scroller.mask.removeMovieClip();
if (this.dataProvider == undefined) {
this.dataProvider = new Array();
}
this.__dropdown.setDataProvider(this.dataProvider);
this.__dropdown.selectMultiple = false;
this.__dropdown.rowCount = this.__rowCount;
this.__dropdown.selectedIndex = selectedIndex;
this.__dropdown.vScrollPolicy = "auto";
this.__dropdown.labelField = this.__labelField;
this.__dropdown.labelFunction = this.__labelFunction;
this.__dropdown.owner = this;
this.__dropdown.changeHandler = this._changeHandler;
this.__dropdown.scrollHandler = this._scrollHandler;
this.__dropdown.itemRollOverHandler = this._itemRollOverHandler;
this.__dropdown.itemRollOutHandler = this._itemRollOutHandler;
this.__dropdown.resizeHandler = this._resizeHandler;
this.__dropdown.mouseDownOutsideHandler = function(eventObj) {
var o = this.owner;
var pt = new Object();
pt.x = o._root._xmouse;
pt.y = o._root._ymouse;
o._root.localToGlobal(pt);
if (o.hitTest(pt.x, pt.y, false)) {
// do nothing
} else if (!o.wrapDownArrowButton && this.owner.downArrow_mc.hitTest(_root._xmouse, _root._ymouse, false)) {
// do nothing
} else {
o.displayDropdown(false);
}
};
this.__dropdown.onTweenUpdate = function(v) {
this._y = v;
};
this.__dropdown.setSize(this.__dropdownWidth, this.__dropdown.height);
// Create the mask that keeps the dropdown listbox only visible below the textfield.
this.createObject("BoundingBox", "mask", 20);
this.mask._y = border_mc.height;
this.mask._width = this.__dropdownWidth;
this.mask._height = this.__dropdown.height;
this.mask._visible = false;
this.__dropdown.setMask(this.mask);
}
return this.__dropdown;
};
Mouse.removeListener(mx.managers.SystemManager);
_global.__SVMouseWheelManager = {};
_root.createEmptyMovieClip('__mouseDownClip1222', -1222).onMouseDown = mx.utils.Delegate.create(mx.managers.SystemManager,mx.managers.SystemManager.onMouseDown);


Не забыть убрать старые хаки.

Modest
21.04.2007, 20:34
__etc
спасибо огромное за помощь, хотя вышло и полурешение но без Вас не справился бы, буду смотреть в сторону отписок.

etc
21.04.2007, 20:45
Я только что отредактировал пост. Вроде больше подписок нет, пробуй.

Modest
21.04.2007, 20:57
Фантатстика все заработало как надо! !!

etc
21.04.2007, 21:00
Только со скроллом можно попрощаться.

Modest
21.04.2007, 21:08
мне он в данном случае не нужен совершенно, а вот отсутвие прокрутки документа огромный минус, который ввел меня в ступор на пару дней )) Еще раз ОГРОМНОЕ спасибо.

Spazm
14.10.2009, 17:42
Огромное спасибо, тоже столкнулся с этой проблемой и Ваш код все преобразил! Тока я пока еще так себе в actionscript и не понимаю волшебных строк этого кода, но все равно еще раз спасибо!)). Жалко теперь combobox не закрывает список пока не был выбран элемент (раньше можно было просто щелкнуть где-нить по флешке и список убирался). Но это небольшая потеря)))