Быстрый способ узнать источник полосы прокрутки? - PullRequest
2 голосов
/ 10 мая 2011

Всякий раз, когда я использую много вложений внутри компонентов mxml (включая много состояний) с довольно большим количеством Vbox и других контейнеров, я всегда смущаюсь, когда вижу на экране полосу прокрутки, особенно с сеткой данных внутри (я всегда хочупоказывать полосу прокрутки в сетке данных, а не в родительском контейнере, для которого я обычно устанавливаю высоту и ширину сетки данных, меньшую, чем ее родительский контейнер во время выполнения).

Мой вопрос: как я мог знать (БЫСТРО), используя отладчик, тот компонент, который является источником полосы прокрутки, которую я вижу на экране (если их больше одной, то некоторые свойства компонента должны измениться при прокрутке вверх или вниз).

Спасибо.

1 Ответ

0 голосов
/ 28 февраля 2012

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

Я быстро решил собрать простое приложение, функция которого - сообщить, какой экранный объект отправляет событие колеса мыши. Для приложения не имеет значения, есть ли полоса прокрутки или нет, но я думаю, вы можете настроить ее в соответствии со своими потребностями. Это быстрый старт, вот код ...

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" minWidth="955" minHeight="600"
                creationComplete="init()">
    <mx:HBox id="HBoxWithScrollbar" width="600" height="500">
        <mx:HBox width="800" height="800">
        </mx:HBox>
    </mx:HBox>
    <mx:TextArea id="record" height="300" width="600"/>
    <mx:Script>
        <![CDATA[
            private function init():void{
                record.text = 'Scroll Record\n';
                this.addEventListener(MouseEvent.MOUSE_WHEEL, recordObject);
                for each (var obj:DisplayObject in this.getChildren()){
                    obj.addEventListener(MouseEvent.MOUSE_WHEEL, recordObject);
                }
            }

            protected function recordObject(event:MouseEvent):void{
                record.text += (event.target as DisplayObject).toString() + '\n';
            }

        ]]>
    </mx:Script>
</mx:Application>

Здесь действительно важно видеть, что вы можете выбрать событие колеса мыши на верхнем уровне, потому что оно по умолчанию пузырится и не может быть отменено.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/InteractiveObject.html#event:mouseWheel

Как только вы получите это событие, у вас есть варианты.

Это было собрано с использованием версии 3.6 Flex SDK, но для сборки версии 4.x не потребовалось бы много времени. Я просто отображаю значение «toString ()» целевого экранного объекта, но это может быть любой атрибут, который вы хотите. Возможно, вы захотите добавить некоторую обработку ошибок для событий добавления цикла, а также в обработчик событий. Как я уже сказал, это только начало, и я надеюсь, что это поможет.

...