¿Una forma rápida de conocer el origen de la barra de desplazamiento?

Cada vez que utilizo mucho anidamiento dentro de componentes mxml (incluidos muchos estados) con bastantes Vboxs y Otros contenedores, siempre me confundo cuando veo una barra de desplazamiento que aparece en la pantalla, especialmente con la cuadrícula de datos dentro (siempre quiero mostrar la barra de desplazamiento en la cuadrícula de datos y no en el contenedor principal, para lo cual generalmente establezco la altura y el ancho de la cuadrícula de datos más pequeños que su contenedor principal en tiempo de ejecución).

Mi pregunta es, ¿cómo podría saber (RÁPIDAMENTE), usando el depurador, qué componente es la fuente de la barra de desplazamiento que veo en la pantalla (si hay más de uno, entonces alguna propiedad del componente debe cambiar cuando lo desplazo hacia arriba? o hacia abajo).

Gracias.

preguntado el 10 de mayo de 11 a las 14:05

¿Ninguno? Básicamente, estoy preguntando qué propiedad del contenedor debo vigilar para determinar en tiempo de ejecución qué barra de desplazamiento estoy moviendo en la pantalla ... gracias ... -

1 Respuestas

Me doy cuenta de que esta respuesta no usa el depurador directamente. Lo digo como una idea para una herramienta sencilla en realidad.

Tuve un intento rápido para armar una aplicación simple cuya función es informar qué objeto de visualización está enviando un evento de rueda del mouse. No le importa a la aplicación si hay una barra de desplazamiento o no, pero supongo que podrías ajustarla a tus necesidades. Realmente es un comienzo rápido, aquí está el código ...

<?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>

Lo importante aquí realmente es ver que puede recoger el evento de la rueda del mouse en el nivel superior, porque burbujea de forma predeterminada y no se puede cancelar.

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

Una vez que tenga ese evento, tendrá opciones.

Esto se creó utilizando la versión 3.6 del Flex SDK, pero no se necesitaría mucho para construir una versión 4.x. Simplemente estoy mostrando el valor "toString ()" del objeto de visualización de destino, pero ese podría ser cualquier atributo que desee. Probablemente querrá poner algo de manejo de errores para el bucle agregando eventos, y también en el manejador de eventos. Como dije, es solo el comienzo y espero que ayude.

Respondido 28 Feb 12, 02:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.