Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как отмасшабировать выпадающий список ComboBox ? (http://www.flasher.ru/forum/showthread.php?t=200447)

wolfenstein 03.06.2013 10:04

Как отмасшабировать выпадающий список ComboBox ?
 
Вложений: 1
Помещаю ComboBox в Sprite, затем изменяю размеры спрайта, в который помещён комбобокс, и получается вот такая беда:

см. изображение в прикреплении

Может кто сталкивался с таким?

C4Grey 03.06.2013 11:02

Нужно просто найти элемент меню(dropdown) и отмасштабировать либо его, либо вложенные элементы, как описано ниже.
http://www.kirupa.com/forum/showthre...opmenu-scaling:
Код AS3:

var combobox:ComboBox = _box;
combobox.dropdown.getChildAt(2).scaleY = combobox.dropdown.getChildAt(2).scaleX = this.scaleY;
 
this.addEventListener(Event.ENTER_FRAME, enterframe);
function enterframe(pEvent:Event):void{
combobox.dropdown.y = this.y + ((combobox.y + combobox.height) * this.scaleY);

Для позиционирования не обязательно использовать ENTER_FRAME, у ComboBox вроде есть событие открытия. Если все же нету - можно добавить слушатель события клика, он будет обработан после раскрытия.

wolfenstein 03.06.2013 13:39

мне изачально пришла в голову такая же мысль

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

как мне видится наиболее приближённым решением что-то между этим:
Код AS3:

this.list.y = this.localToGlobal(new Point(this.x, this.y) ).y - (this.height + this.startHeight)

и в от этим:
Код AS3:

this.list.y = this.localToGlobal(new Point(this.x, this.y) ).y - (this.startHeight);

в примерах этого кода this - это это ссылка на класс, расширяющий класс ComboBox

печально конечно что это не окончальное решение. Вобщем нехватает какого-то коэффициента, на который нужно умножить или разделить

mooncar 03.06.2013 14:20

А если компонент не масштабировать? Я точно не помню, к тому же речь о компоненте AS3, но разве у него нет нативного метода, изменяющего видимый размер?

Wolsh 03.06.2013 14:45

А не так ли?
Код AS3:

this.list.y = this.localToGlobal(new Point(this.x, this.y + this.startHeight)).y;


wolfenstein 03.06.2013 15:35

Вложений: 2
Цитата:

Сообщение от Wolsh (Сообщение 1136227)
А не так ли?
Код AS3:

this.list.y = this.localToGlobal(new Point(this.x, this.y + this.startHeight)).y;


да, почти точно, спасибо

только там не прибавлять, а вычитать, тогда позиция выпадающего списка в самый аккурат получается:
Код AS3:

this.list.y = this.localToGlobal(new Point(this.x, this.y - this.startHeight)).y;


осталось решить как поправить ширину и высоту выпадающего списка при масштабировании

Wolsh 03.06.2013 16:02

Ну Вы могли сразу посчитать коэфициент масштабирования, запросив глобальные координаты точек this.x и this.x + this.width и узнав таким образом "новую" ширину, поделить ее на this.width — вот и скейл.

wolfenstein 03.06.2013 16:32

Цитата:

Сообщение от Wolsh (Сообщение 1136235)
Ну Вы могли сразу посчитать коэфициент масштабирования, запросив глобальные координаты точек this.x и this.x + this.width и узнав таким образом "новую" ширину, поделить ее на this.width — вот и скейл.

Спасибо : )

Получилось то что нужно:
Код AS3:

var poinSize:Point = this.localToGlobal(new Point(this.x + this.width, this.y + this.height));
this.list.scaleX = (poinSize.x - this.list.x) / this.width;
this.list.scaleY = (poinSize.y - this.list.y) / this.height;


a.konigin 08.04.2016 10:03

Вложений: 1
Простите за поднятие древней темы, однако столкнулся с такой же проблемой масштабирования. Увеличиваю спрайт на котором ComboBox, при этом видимая часть ComboBox'a увеличивается пропорционально скейлу спрайта, а выпадающий список остается такого же размера, как и до скейла. Не пойму что-то, как тс использовал код из предыдущего поста.

undefined 08.04.2016 11:10

вроде у всех компонентов есть родной метод setSize, который точно знает как надо компонент тянуть


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

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