Во-первых, указываем в Application

Код AS3:
<mx:Application ... preloader="CustomPreloader">
А потом сам CustomPreloader:

Код AS3:
package {
import flash.display.*;
import flash.events.*;
import flash.net.URLRequest;
import mx.events.FlexEvent;
import mx.preloaders.DownloadProgressBar;
import mx.preloaders.IPreloaderDisplay;
public class CustomPreloader extends DownloadProgressBar implements IPreloaderDisplay {
private var imageControl:Loader;
public function CustomPreloader() {
super();
}
override public function set preloader(preloader:Sprite):void {
preloader.addEventListener(ProgressEvent.PROGRESS, handleProgress);
preloader.addEventListener(Event.COMPLETE, handleComplete);
preloader.addEventListener(FlexEvent.INIT_PROGRESS, handleInitProgress);
preloader.addEventListener(FlexEvent.INIT_COMPLETE, handleInitComplete);
}
override public function initialize():void {
imageControl = new Loader();
imageControl.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteHandler);
imageControl.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, handleIOError);
imageControl.load(new URLRequest("assets/SomeSkin.swf"));
}
private function loaderCompleteHandler(event:Event):void {
imageControl.content["qqq"].scaleX = 0;//ползунок
addChild(imageControl);
this.x = this.stage.stageWidth/2 - imageControl.contentLoaderInfo.width/2;
this.y = this.stage.stageHeight/2 - imageControl.contentLoaderInfo.height/2;
}
private function handleProgress(event:ProgressEvent):void {
var perc:Number = event.bytesLoaded / event.bytesTotal;
if (imageControl.content) {
imageControl.content["qqq"].scaleX = perc;
imageControl.content["perc"].text = perc * 100;//строка с цифрами
}
}
private function handleComplete(event:Event):void{
}
private function handleInitProgress(event:Event):void {
}
private function handleInitComplete(event:Event):void {
dispatchEvent(new Event(Event.COMPLETE));
}
private function handleIOError(event:IOErrorEvent):void {
}
}
}
Может где чего не так, но думаю, суть ясна.