Форум 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=94834)

Modest 20.04.2007 21:14

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

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

etc 20.04.2007 21:19

Убить обработчик onMouseWheel (хаком).

Modest 20.04.2007 21:35

Цитата:

Сообщение от __etc
Убить обработчик 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

Цитата:

Сообщение от __etc
Я думаю, что ломать придется долго и нудно, потому как подписка на 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

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


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

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