Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Horizontal Scroll in ADG (http://www.flasher.ru/forum/showthread.php?t=175373)

OFFmind 15.02.2012 19:11

Horizontal Scroll in ADG
 
Добрый день!

Есть пользовательское дерево, которое наследовано не от mx.tree, а от mx.AdvancedDataGrid. Т.е. фактически, это ADG с одной колонкой. Вопрос - реально ли как-то сделать в нем горизонтальный скролл, кроме, как положить его в контейнер и добавить отдельный скроллер.
Т.е. меня интересует именно возможность как-то перехватить логику скроллирования по колонкам и переписать ее, это вообще реально?

Спасибо за внимание.

Genzo 15.02.2012 19:16

http://help.adobe.com/en_US/flex/usi...4deb0ca54-7fff

OFFmind 15.02.2012 19:46

Хм, так это же itemRenderer. Я не совсем понял, как это использовать для решения моей задачи. Если добавить в него скролл, то он добавиться к каждому элементу, а не один на весь столбик. Да, у меня как раз используется кастомный спарковский рендерер. Я даже смог посчитать его ширину. Но когда я пытаюсь дереву поставить horizontalMaxPosition = ширина самого большого элемента, скролл все равно остается не активным.

Спасибо за внимание и буду рад ответам)

droopy 15.02.2012 23:52

Сделать колонку шире чем ADG и выставить horizontalScrollPolicy.

OFFmind 16.02.2012 14:12

Проблема в том, что mx:ADG не позволяет скролить внутри колонки. Он скролит только по колонкам. Так что метод с выставлением ширины колонки не сработает.
Все таки в интернетах я нашел то что искал. А именно: как переопределить логику скроллирования. Грубо говоря, можно сделать примерно так:

Код AS3:

override protected function scrollHandler(event:Event):void
        {         
            // Переопределяем логику для скролл эвента:
            var scrEvt:ScrollEvent = event as ScrollEvent;
            if(scrEvt.direction == ScrollEventDirection.HORIZONTAL) {
                // Берем части горизонтального скрола:
                var scrDownArrow:DisplayObject = horizontalScrollBar.getChildAt(3);
                var sctThumb:DisplayObject = horizontalScrollBar.getChildAt(2);   
                var hPos:Number = Math.round((sctThumb.y - scrDownArrow.height) / (scrDownArrow.y - sctThumb.height - scrDownArrow.height) * 1000);   
 
                // Двигаем контент нашего ADG
                listContent.move(hPos * -1, listContent.y);
            }
            // Ничего не делаем, если скрол вертикальный:
            else {
                super.scrollHandler(event);
            }
        }

Но есть вопрос: почему-то текст, который был за рамками ADG не отображается. Я уже пытался и listContent.invalidateDisplayList() и commitProperties(). Может есть идеи?


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

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