Вот часть кода для главной сцены. Для клипа control_window.slider AS классом является HorizontalSlider (прописано в Linkage):

Код AS1/AS2:
var control_window:MovieClip = attachMovie("mc_control_window", "control_window", 10);
var somelst:Object = new Object();
somelst.change = function(evt:Object) {
trace('value changed to: ' + evt.target.value);
}
control_window.slider.addEventListener('change', somelst);
Код абстрактного слайдера:

Код AS1/AS2:
import mx.events.EventDispatcher;
class Slider extends MovieClip
{
public static var CHANGE_EVENT:String = "change";
public static var BEFORE_CHANGE_EVENT:String = "beforeChange";
//--------- Implement EventDispatcher ------------//
public var addEventListener:Function;
private var dispatchEvent:Function;
//----------------------------------------------//
private var minval:Number = 0;
private var maxval:Number = 100;
private var val:Number = 50;
public function Slider()
{
EventDispatcher.initialize(this);
}
//----------------- Value getters/setters ----------------------------------//
public function get value():Number {
return Math.round(val);
}
public function set value(v:Number) {
setValue(v);
dispatchEvent({type:CHANGE_EVENT, target:this});
}
public function getValue():Number {
return Math.round(val);
}
//Set value without event calling
public function setValue(v:Number) {
if (v < minval) {
v = minval;
} else if (v > maxval) {
v = maxval;
}
val = v;
}
//-------------------------------------------------------------------------------//
public function get minValue():Number {
return minval;
}
public function set minValue(minv:Number) {
if (minv > maxval) {
minv = maxval;
}
minval = minv;
//re-check value and raise onChange event
setValue(val);
dispatchEvent({type:CHANGE_EVENT, target:this});
}
public function get maxValue():Number {
return maxval;
}
public function set maxValue(maxv:Number) {
if (maxv < minval) {
maxv = minval;
}
maxval = maxv;
//re-check value and raise onChange event
setValue(val);
dispatchEvent({type:CHANGE_EVENT, target:this});
}
}
Код класса реального горизонтального слайдера:

Код AS1/AS2:
import mx.utils.Delegate;
class HorizontalSlider extends Slider
{
//--------- Visual slider elements ---------------------//
private var handle:MovieClip;
private var rail:MovieClip;
private var txt:TextField;
//------------------------------------------------------//
private var enbl:Boolean = true;
public function HorizontalSlider()
{
super();
this.addEventListener(CHANGE_EVENT, this);
value = 100;
if (handle._totalframes > 1) {
handle.onRollOver = function() {
this.gotoAndStop(2);
}
handle.onRollOut = function() {
this.gotoAndStop(1);
}
}
handle.onPress = Delegate.create(this, mouseDownHandler);
rail.onPress = Delegate.create(this, function() {
handle._x = this._xmouse - handle._width / 2;
handle.onPress();
});
handle.onReleaseOutside = function() {
if (this._totalframes > 1) {
this.gotoAndStop(1);
}
this.onRelease();
}
handle.onRelease = rail.onRelease = rail.onReleaseOutside = Delegate.create(this, mouseUpHandler);
}
private function mouseDownHandler() {
if (!enbl) {
return;
}
if (handle._totalframes > 1) {
handle.gotoAndStop(3);
}
dispatchEvent( { type:BEFORE_CHANGE_EVENT, target:this } );
handle.startDrag(false, rail._x, handle._y, rail._x + rail._width - handle._width, handle._y);
this.onEnterFrame = function() {
value = MathUtil.getLinearInterpolation(rail._x, rail._x + rail._width - handle._width, minval, maxval, handle._x);
}
this.onEnterFrame();
}
private function mouseUpHandler() {
stopDrag();
this.onEnterFrame();
delete this.onEnterFrame;
}
public function setValue(v:Number) {
super.setValue(v);
}
public function change() {
var startX:Number = rail._x;
var endX:Number = rail._x + rail._width - handle._width;
handle._x = MathUtil.getLinearInterpolation(minval, maxval, startX, endX, val);
txt.text = String(value);
}
public function get enabled():Boolean {
return enbl;
}
public function set enabled(enbl:Boolean) {
this.enbl = enbl;
}
}
Повторю вопрос - после добавления mc_control_window на сцену клип slider, имеющий в качестве AS класса HorizontalSlider работает (ползунок перемещается, меняется значение value, т.е. инициализация как-то прошла), но листнеры не добавляются почему-то. Клип slider лежит в клипе mc_control_window статически (добавлен вручную).