![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2009
Сообщений: 64
|
привет всем.
делаю кастомный combobox. споткнулся о проблему направления dropdown, когда он откроется. ситуация усложняется тем, что "y" для dropdown он начала экрана, а у combobox - от родительского элемента. подскажите, если кто знает, как определить, выше dropdown от combobox-а или ниже? заранее спасибо. во |
|
|||||
|
Для преобразования координат из локальных в глобальные и наоборот есть методы у DisplayObject-a:
localToGlobal globalToLocal
__________________
2+2=5 |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 64
|
ну мало-ли... еще кто-то мучается.
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" open="comboOpenHandler(event)" rowCount="12" closeDuration="0" openDuration="0"> <mx:Script> <![CDATA[ private function comboOpenHandler(e:Event):void{ var c:ComboBox=e.currentTarget as ComboBox; //определяем глобально, где стоит поле var yC:Number = c.localToGlobal(new Point(c.x,c.y)).y; //тупо прикидываем, откроется он вниз или вверх. 1100 - мой размер экрана 1024. var downOpen:Boolean = (yC + c.height + c.dropdown.height)< 1100; if (downOpen) { //сдвигаем по вертикали c.dropdown.y =c.dropdown.y - c.height - 1; if (c.dataProvider.length > 4) c.dropdown.y -= (c.height*2); } else { c.dropdown.y =c.dropdown.y + (c.height*2) + 1; if (c.dataProvider.length > 4) c.dropdown.y += c.height; } //сдвигаем по горизонтали и увеличиваем для накрывания всего поля c.dropdown.width = c.width+2; c.dropdown.x = c.dropdown.x-1; if (c.dataProvider.length < 2) c.dropdown.height = c.height + 2; } ]]> </mx:Script> </mx:ComboBox> |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 64
|
последнее примечание: localToGlobal врет.
почему и в каких случаях, пока не понял. но у меня из десятка скринов, на одном вместо 450, возвращает 860. во :-( |
|
|||||
|
Вы его просто не правильно едите.
Возможно вы рассчитываете координаты для компонента который находится не глобально, а ложится на какой-то контейнер у которого уже своя система и тогда надо делать обратное преобразование globalToLocal.
__________________
2+2=5 |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 64
|
гм... можно развить мысль, пожалуйста?
понятно про что, не понятно как решить "раз и на всегда". заранее спасибо. во |
|
|||||
|
Ну а куда тут её ещё развивать:
localToGlobal - преобразует заданные координаты x и y из значений относительно исходной точки (0, 0) конкретного объекта (локальных координат) в значения относительно исходной точки рабочей области (глобальные координаты). GlobalToLocal - наоборот. Есть у вас там допустим канвас, и его локальная точка (0, 0) в глобальных координатах (т.е. всего приложения) уже другая и будет допустим (10, 10), т.к. Ваш канвас на основной аппликухе лежит по таким координатам. Т.е. если Вам надо взять координаты с одного DisplayObject-а и потом по этим же координатам сделать что-то на другом DisplayObject-е. Вам надо методом первого DO найти гломальные координаты этой точки и потом методом второго DO уже преобразовать эти глобальные координаты в в локальные для второго DO.
__________________
2+2=5 |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 64
|
гм... угу. т.е. перебрать всю иерархию встроенных обьектов. была надежда, что localToGlobal мне сразу покажет обьекты глобально, вне зависимости от уровня "залегания". или я опять что-то не так понял? ну вот работает везде, как я ожидал, а в одном месте - нет. может все же localToGlobal сразу возвращает глобальные координаты вне зависимости от глубины вопрошающего?.. :-( во
|
|
|||||
|
Ну так ведь так и есть...
|
|
|||||
|
Регистрация: Nov 2009
Сообщений: 64
|
выше писал, что столкнулся со случаем, когда "так и нет".
причину не понял. :-( во |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:45. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|