PDA

Просмотр полной версии : [flash 8] Skinning components


: hr :
11.11.2005, 15:17
Друзья, прошу помощи... Суть проблемы: нужно в процесссе выполнения ролика изменять цветовую схему стандартного компонента ScrollPane.
Согласно описанию в хэлпе (Linking skin color to styles) создаю внутри компонента мувиклипы, регистрирую их в качестве свойств mx.skins.ColoredSkinElement.setColorStyle (this, "symbolArrowUpColor");, далее назначаю им цвета
_global.style.setStyle("symbolArrowUpColor", 0xD9D9D9);

Отсюда несколько вопросов:
1. Почему не получается установить стиль для конкретного экземпляра компонента _root.my_component.setStyle("symbolArrowUpColor", 0xD9D9D9);
2. При установке цвета для множества элементов компонента, т.е. вызове многократно
_global.style.setStyle("элемент который нужно перекрашивать 1", 0xD9D9D9);
_global.style.setStyle("элемент который нужно перекрашивать N", 0xD9D9D9);
и т.д.
отрисовка компонента начинает безбожно тормозить. И об этом сказано в хэлпе If you want to change multiple properties, or change properties for multiple component instances, you can create a custom style. A component instance that uses a custom style for multiple properties will render faster than a component instance with several setStyle() calls.

Однако использовать custom style не получается:

import mx.styles.CSSStyleDeclaration;
var new_style:Object = new CSSStyleDeclaration();
_global.styles.myStyle = new_style;

new_style.setStyle("borderStyle", "none")
new_style.setStyle("элемент который нужно перекрашивать 1", 0xD9D9D9);

my_component.setStyle("styleName", "myStyle");

Работает только ("borderStyle", "none"), а цвет моего зарегестрированного элемента компонента изменить не удается.

Прошу помощи!

: hr :
11.11.2005, 18:59
Коллеги, уделите внимание пожалуйста!

: hr :
14.11.2005, 15:19
Неужели никто не сталкивался?

MaxLife
14.11.2005, 19:11
Проверь идентификаторы. Скорее всего засада именно там. На крайняк проверь в 7-ке/6-ке. А ещё проще - воспроизведи пример из хелпа. Если работает, потихоньку подключай своё.

MaxLife
14.11.2005, 19:14
вот пример стопроцентно работающего кода по назначению стилей:

import mx.styles.StyleManager;
import mx.skins.ColoredSkinElement;
import mx.styles.CSSStyleDeclaration;

mx.styles.StyleManager.registerColorName('skinColor_1', 0xFFFFFF);
mx.styles.StyleManager.registerColorStyle('skinColor1');

mx.styles.StyleManager.registerColorName('skinColor_2', 0xFF0000);
mx.styles.StyleManager.registerColorStyle('skinColor2');

mx.styles.StyleManager.registerColorName('skinColor_3', 0x00FF00);
mx.styles.StyleManager.registerColorStyle('skinColor3');

mx.styles.StyleManager.registerColorName('skinColor_4', 0x0000FF);
mx.styles.StyleManager.registerColorStyle('skinColor4');

_root.t1.setStyle('skinColor1', 'skinColor_1')
_root.t1.setStyle('skinColor2', 'skinColor_2')
_root.t1.setStyle('skinColor3', 'skinColor_1')
_root.t1.setStyle('skinColor4', 'skinColor_1')

_root.cb1['colorName'] = 'skinColor1';
_root.cb2['colorName'] = 'skinColor2';
_root.cb3['colorName'] = 'skinColor3';
_root.cb4['colorName'] = 'skinColor4';


Соответственно, _root.t1 - компонент.

: hr :
16.11.2005, 00:58
MaxLife , спасибо большое! Проблема решилась регистрацией добавленных мною в компонент скинов (мувиклипов) методом mx.styles.StyleManager.registerColorStyle('имя созданного внутри компонента скина').

По правде говоря из хэлпа не особенно понял что именно делает сей метод mx.styles.StyleManager.registerColorStyle(), не мог бы ты пояснить немного?

MaxLife
16.11.2005, 18:31
Если я правильно помню, он вносит имя компонента в коллекцию элементов скинов, используя которую потом цветовыми скинами и управляет. Коллекция водится где-то в _global. Если интересует более точно, смотри код класса StyleManager.as в каталоге Flash.