This is a discussion on Componente ProgressBar di Flash CS3 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Ecco un articolo che potrebbe essere una variante di questi articoli:
Caricare un SWF esterno con Flash CS3
Preloader con ...
In questo caso utilizzo il componente ProgressBar per monitorare lo stato di caricamento di un SWF esterno.
Inoltre utilizzo il componente UILoader per caricare l' SWF invece della classe Loader ( utilizzata in molti esempi di questo sito ).
Aggiungo un componente Label al posto di un campo di testo dinamico.
Vediamo come funziona...
Creo un FLA, che salvo con nome ' bar.fla ' , al cui interno trascino sullo stage un componente ProgressBar e gli assegno nome istanza ' bar_pb '.
Creo la Document Class, un file AS che salvo con nome ' Main.as ', implementata in questo modo:
Code:
package
{
import flash.display.MovieClip;
import fl.containers.UILoader;
import fl.controls.Label;
import flash.text.TextFieldAutoSize;
import flash.events.Event;
import flash.events.ProgressEvent;
public class Main extends MovieClip
{
private var UI_loader:UILoader
private var etichetta:Label;
private var url:String;
public function Main()
{
init();
}
private function init():void
{
url='http://www.flepstudio.org/swf/my_swf.swf?cachebuster='+new Date().getTime();
UI_loader=new UILoader();
UI_loader.autoLoad=false;
UI_loader.source=url;
UI_loader.move(stage.stageWidth/2,stage.stageHeight/2);
UI_loader.scaleContent=false;
UI_loader.load();
bar_pb.source=UI_loader;
bar_pb.move(stage.stageWidth/2-bar_pb.width/2,stage.stageHeight/2);
bar_pb.addEventListener(ProgressEvent.PROGRESS,progresso);
bar_pb.addEventListener(Event.COMPLETE,completato);
etichetta=new Label();
etichetta.autoSize=TextFieldAutoSize.LEFT;
etichetta.move(bar_pb.x,bar_pb.y+bar_pb.height);
addChild(etichetta);
}
private function progresso(e:ProgressEvent):void
{
etichetta.text=int(e.currentTarget.percentComplete)+'%';
}
private function completato(e:Event):void
{
bar_pb.removeEventListener(ProgressEvent.PROGRESS,progresso);
bar_pb.removeEventListener(Event.COMPLETE,completato);
removeChild(bar_pb);
removeChild(etichetta);
addChild(UI_loader);
UI_loader.move(-100,-100);
}
}
}
Analizziamo il codice
Proprietà
un' istanza del componente UILoader
private var UI_loader:UILoader
un' istanza del componente Label
private var etichetta:Label;
una variabile di tipo stringa che conterrà l' url dell' SWF da caricare
private var url:String;
Metodi
init();
assegno l' url dell' SWF esterno alla variabile url
url='http://www.flepstudio.org/swf/my_swf.swf?cachebuster='+new Date().getTime();
istanzio il componente UILoader
UI_loader=new UILoader();
imposto la sua proprietà autoLoad a false
UI_loader.autoLoad=false;
assegno alla sua proprietà source, il valore della variabile url
UI_loader.source=url;
posiziono il componente
UI_loader.move(stage.stageWidth/2,stage.stageHeight/2);
imposto la sua proprietà scaleContent a false
UI_loader.scaleContent=false;
faccio partire il caricamento dell' SWF esterno
UI_loader.load();
dico alla ProgressBar che la sua proprietà source è l' istanza di UILoader ( UI_loader )
bar_pb.source=UI_loader;
posizione la ProgressBar
bar_pb.move(stage.stageWidth/2-bar_pb.width/2,stage.stageHeight/2);
aggiungo un listener alla ProgressBar in ascolto dell' evento ProgressEvent.PROGRESS che, una volta avvenuto l' evento, chiamerà lafunzione progresso()
bar_pb.addEventListener(ProgressEvent.PROGRESS,pro gresso);
aggiungo un listener alla ProgressBar in ascolto dell' evento Event.COMPLETE che, una volta avvenuto l' evento, chiamerà lafunzione completato()
bar_pb.addEventListener(Event.COMPLETE,completato) ;
istanzio il componente Label
etichetta=new Label();
gli assegno un autosize ( in questo caso utilizzando il metodo statico LEFT della classe TextFieldAutoSize )
etichetta.autoSize=TextFieldAutoSize.LEFT;
posiziono la Label
etichetta.move(bar_pb.x,bar_pb.y+bar_pb.height);
la aggiungo al DisplayObject ( altrimenti non sarebbe visibile )
addChild(etichetta);
progresso();
assegno il testo alcomponente Label. In questo caso assegno la proprietà percentComplete della ProgressBar ( che è e.currentTarget, cioè chi ha dispacciato l' evento )
etichetta.text=int(e.currentTarget.percentComplete )+'%';
completato();
rimuovo i listeners
bar_pb.removeEventListener(ProgressEvent.PROGRESS, progresso);
bar_pb.removeEventListener(Event.COMPLETE,completa to);
rimuovo i componenti ProgressBar e Label
removeChild(bar_pb);
removeChild(etichetta);
aggiungo al DisplayObject l'istanza di UILoader ( UI_loader che adesso contiene l' SWF esterno che è diventata una MovieClip )
addChild(UI_loader);
posiziono l' istanza di UILoader
UI_loader.move(-100,-100);