Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.06.2014, 14:50
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 1  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
По умолчанию Custom UIComponent + flash = проблемы с percentHeight и percentWidth

Вкратце обрисую суть проблемы. Есть проект сделанный в Flash CS6, с графикой, текстфилдом и присвоенным классом (в котором минимум кода), этот проект компилится в swc. swc подключаю к flex проекту и делаю на его основе UIComponent таким образом:

Код AS3:
package as3comps
{
	import flash.events.MouseEvent;
	import mx.core.UIComponent;
	import as3.FlashTextInputComp;
 
 
	public class FlexTextInput extends UIComponent
	{
 
		private var _input:FlashTextInputComp;
 
 
 
 
		public function FlexTextInput()
		{
			super();
			_input = new FlashTextInputComp();
		}
 
		override protected function createChildren():void
		{
			//здесь создаем статические свойства вокуг динамических (маски, окантовки и т.д.)
			addChild(_input);
			super.createChildren();
		}
 
		override protected function measure():void
		{
			this.minHeight = 40;
			this.minWidth = 437;
			super.measure();
		}
 
		override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
		{
			super.updateDisplayList(unscaledWidth, unscaledHeight);
 
		}
	}
}
где FlashTextInputComp - класс из флешевой swc. Все нормально и компонент можно использовать во flex, но я столкнулся с тем, что размеры компонента через mxml верстку изменять не получается, например такое присвоение длинны не работает:
Код AS3:
<as3comps:FlexTextInput id="input" width="100%" />
Чтение доков на тему жизненного цикла компонентов ситуацию не прояснило. Конечно буду копать сам, и отпишу если что найду, но интересует быстрое и легкое решение, не переделывая флешевый компонент.

Добавлено через 1 час 22 минуты
Уточню вопрос, это понятно что присвоение длинны и высоты компоненту происходит, - как правильно менять длину и высоту флешевого ребенка этого компонента?

Добавлено через 2 часа 2 минуты
И да, через as3 я добился нужного эффекта, но меня интересует именно правильный с точки зрения flex подход :-)

Старый 25.06.2014, 01:13
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 2  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
насколько помню, в updateDisplayList() и меняете размеры своего чайлда

Старый 25.06.2014, 11:33
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 3  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Насчет updateDisplayList() я рекомендаций в инете не встречал, тем более что туда передаются анскейлд параметры - это смущает, у меня получилось добиться нужного эффекта через setActualSize, но размер удается менять только через as3 код, через mxml процентные размеры не работают, поэтому и не уверен, что сделал правильно

Старый 26.06.2014, 18:28
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
PainKiller, перенесите создание FlashTextInputComp из конструктора в createChildren(), он для этого и создавался.

Размеры FlashTextInputComp, как вам и сказал ShockWave512, меняйте в updateDisplayList.

Цитата:
Насчет updateDisplayList() я рекомендаций в инете не встречал
Каких рекомендаций? Это часть жизненного цикла.
1. createChildren — создаются дочерние компоненты.
2. measure — расчитываюся размеры по-умолчанию (measuredWdth, measuredHeight).
2. commitProperties — пересчитываются зависимые свойства.
3. updateDisplayList — обновляется отображение компонета, дочерние компоненты расставляются по своим местам и меняются их размеры в соответствии с расчитанными размерами компонента (unscaledWidth, unscaledHeight).
Цитата:
тем более что туда передаются анскейлд параметры - это смущает
А что бы вам дали размеры после масштабирования? Какая вам разница будет ли у компонента изменен scaleX / scaleY?
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 27.06.2014, 11:31
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 5  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Цитата:
Размеры FlashTextInputComp, как вам и сказал ShockWave512, меняйте в updateDisplayList.
Немного не понял как это сделать. Сделал вот так:
Код AS3:
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
		{
			//trace ("updateDisplayList:  unscaledWidth = " + unscaledWidth + " unscaledHeight = " + unscaledHeight);
			_input.width = unscaledWidth;
			_input.height = unscaledHeight;
			if(_input.scaleX != _input.scaleY)
			{
				var max:Number = Math.max(_input.scaleX, _input.scaleY);
				_input.scaleX = max;
				_input.scaleY = max;
			}
			trace("_input.scaleX = " + _input.scaleX);
			trace("_input.scaleY = " + _input.scaleY);
			super.updateDisplayList(unscaledWidth, unscaledHeight);
 
		}
Через mxml размеры все равно не меняются, никакой разницы с переопределением setActualSize, я не увидел. И кстати попробовал большие разрешения, заметил глюки в позиционировании компонента в формах, хотя при переопределении setActualSize они тоже есть


Последний раз редактировалось PainKiller; 27.06.2014 в 12:10.
Старый 27.06.2014, 18:50
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Значит где-то еще накосячили.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 27.06.2014, 19:14
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 7  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
с глюками вопрос решил, а вот с mxml так ничего сделать и не удалось, но это и не критично

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:45.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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