Actionscript/ Dicas/ Flash Player/ Flex

Dica: Exibindo o consumo de memória do Flash Player em sua aplicação Flex

Duvida vinda por e-mail, bastante desaconselhado já que demoramos muito para responder os e-mails. Como essa dúvida era legal e única, eis aqui uma solução.

Quero exibir a quantidade de memória que minha aplicação Flex está consumindo no momento da execução. Bom dificilmente você vai saber quanto ela está consumindo se você estiver com algum site aberto ou até mesmo MSN Live que use o Flash Player. Já que para ler o consumo de memória mesmo é necessário estar apenas a aplicação rodando. Uma vez que a quantidade de memória acumulativa sendo consumida é medida pelo Flash player em geral e não apenas da aplicação. Se for nessas circunstâncias você pode exibir o consumo de memória para o usuário final. Caso contrário aconselho usar os recursos do Flex Builder como Profiler para tal.

Então como exibir?

Para facilitar eu criei uma classe utilitária chamada MemoriaUtil.as

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package
{
	import flash.system.System;
 
	public class MemoriaUtil
	{
		public function MemoriaUtil()
		{
		}
		public static function uso():String{
 
			 var memoria:String = Number(System.totalMemory/1024/1024).toFixed(2)+'MB';
 
			 return memoria;
		}
	}
}

E uso no Flex assim.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
< ?xml version="1.0" encoding="utf-8"?>
<application xmlns:"http://www.adobe.com/2006/mxml" layout="absolute">
 
	<script>
		< ![CDATA[
 
 
				public function testarMemoria():void{
 
						memoriatxt.text = 'Uso atual do seu Flash Player é de: '+MemoriaUtil.uso();
				}
		]]>
	</script>
		<label enterFrame="testarMemoria()" fontSize="20" x="100" y="100" id="memoriatxt"/>
</application>
Actionscript/ Actionscript Frameworks/ AS 3.0/ Flash Componentes/ Flash CS 3/ Flash CS4

Criando um player de MP3 com Flash CS4 e actionscript 3.0

O exemplo abaixo, mostra como criar um player de música em actionscript 3.0 feito com alguns componentes básicos do Flash CS4, aquiles que vem por padrão no Flash CS3 e Flash CS4.
O projeto foi feito usando o Flex Builder, então procure nos arquevos do site como usar os componentes do Flash no Flex Builder.

Na atual versão do actionscript 3.0 é bem complicado usar a classe de som, para se ter uma idéia, foi necessário usar as classes Sound, SoundChannel,SoundTransform, só para dar o play e controlar o volume.
Em fim, segue abaixo o exemplo:

playermp3

Código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package {
	import fl.controls.Button;
	import fl.controls.Slider;
 
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.net.URLRequest;
	import flash.media.Sound;
	import flash.media.SoundTransform;
	import flash.media.SoundChannel;
	import flash.events.MouseEvent;
	import flash.events.Event;
	import fl.events.SliderEvent;
	import fl.controls.Label;
 
	[SWF(width="400",height="150",backgroundColor="0xF2F2F2",frameRate="25")]
	public class AS3Player extends Sprite
	{
		public var playButton:Button;
		public var stopButton:Button;
		public var volumeControl:Slider;
		public var urlSom:String = "mp3/seusom.mp3";
		public var MP3Request:URLRequest;
		private var musicaTransform:SoundTransform;
		private var musicaCanal:SoundChannel;
		private var musica:Sound;
		private var volLabel:Label;
 
 
		public function AS3Player()
		{
			super();
 
			MP3Request = new URLRequest(urlSom);
 
			musica = new Sound();
			musica.load(MP3Request);
			musicaCanal = new SoundChannel();
			musicaTransform = new SoundTransform(0.5,0);
 
 
 
			/**
			 * Montar os botões e Slider para controlar o som
			 *
			 * playButton - Toca o som;
			 * stopButton - Para o som;
			 * volumeControl - Aumenta e diminue o som;
			 * */
 
			playButton = new Button();
			playButton.label = "Tocar";
			playButton.x = 10;
			playButton.y = 20;
			addChild(playButton);
			playButton.addEventListener(MouseEvent.CLICK,SomAction);
 
			stopButton = new Button();
			stopButton.label = "Parar";
			stopButton.x = playButton.width + 20;
			stopButton.y = 20;
			addChild(stopButton);
			stopButton.addEventListener(MouseEvent.CLICK,SomAction);
 
			volumeControl = new Slider();
			volumeControl.direction = "horizontal"// ou vertical;
			volumeControl.minimum =0;
			volumeControl.maximum =1;
			volumeControl.doubleClickEnabled = true;
			volumeControl.tickInterval = .1;
			volumeControl.snapInterval = .1;
			volumeControl.value = musicaTransform.volume;
			volumeControl.liveDragging = true;
			volumeControl.x = 230;
			volumeControl.y = 20;
			addChild(volumeControl);
			volumeControl.addEventListener(SliderEvent.CHANGE,VolumeAction);
 
			volLabel = new Label();
			volLabel.text = "Volume";
			addChild(volLabel);
			volLabel.x = 250;
			volLabel.y = 40;
		}
 
		/**
		 * @public
		 * Controla o volume da música carregada;
		 * */
		public function VolumeAction(e:SliderEvent):void{
				musicaTransform.volume = volumeControl.value;
				musicaCanal.soundTransform = musicaTransform;
		}
 
		/**
		 * @public
		 * controla o som, play e stop;
		 * */
		public function SomAction(e:MouseEvent):void{
 
				var posicao:int = musicaCanal.position;
				if(playButton.label == "Tocar"){
					playButton.label = "Pausa";
					musicaCanal = musica.play(posicao);
				}else{
					musicaCanal.stop();
					playButton.label = "Tocar";
					musicaCanal.stop();
				}
		}
	}
}
Actionscript/ Actionscript Frameworks/ AS 3.0/ Flash CS4

Trabalhando com DataProvider no Flash CS3/CS4

A sintaxe de programação para se trabalhar com DataProvider no Flash CS3 ou CS4 é um pouco diferente da que estamos acostumados no Flex. Entretanto o funcionamento é o mesmo.

O exemplo abaixo, popula um controle de ComboBox, e foi feito com Document Class, caso você queria setar um para rodar em sua máquena.

A primeira coisa que você faz para adicionar dados ao seu controle é justamente criar um objeto DataProvider e setar o source dele para o Array, XML ou coleção de objetos que você tenha. Ele parece muito com o comportamento do ICollectionView do Flex.

Exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package{
		import fl.controls.ComboBox;
		import fl.data.DataProvider;
		import flash.events.Event;
 
		import flash.display.MovieClip;
		[SWF(width="800",height="600", backgroundColor="0xcccccc", frameRate='40')]
		public class Main extends MovieClip {
 
			public var cbx:ComboBox;
			public var arr:Array = ['Sao Paulo','Recife','Rio de Janeiro','Brasilia'];
			public function Main() {
				var d:DataProvider = new DataProvider(arr);
					cbx = new ComboBox();
					cbx.dataProvider = d;
					addChild(cbx);
					cbx.x = 100;
					cbx.y = 100;
					cbx.addEventListener(Event.CHANGE,selecionado);
			}
			private function selecionado(e:Event):void{
				trace(e.target.selectedItem.data.toString());
			}
		}
}
Actionscript/ Actionscript Frameworks/ AS 3.0

Como carregar um arquivo externo no Actionscript 3.0

Começando uma nova categoria aqui no site, para desenvolvedores Flash,AIR,Flash, independentemente de framework sendo SDK do Flex ou não.

O Código abaixo, mostra como carregar um arquevo de XML externo, esse arquevo pode ser um arquevo de texto também (txt).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.SecurityErrorEvent;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
 
	public class as3Howto extends Sprite
	{
 
		public var suaURL:String = "arquevo.xml";
		public var requesita:URLRequest;
		public var loader:URLLoader;
		public function as3Howto()
		{
 
			// montar os objetos
 
			requesita = new URLRequest(suaURL);
			loader = new URLLoader();
			loader.addEventListener(IOErrorEvent.IO_ERROR,ioHandler);
			loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,segurancaHandler);
			loader.addEventListener(Event.COMPLETE,completoHandler);
			// inicia o processo
			loader.load(requesita);
		}
 
		private function ioHandler(e:IOErrorEvent):void{
				trace(e.text + 'n');
		}
		private function segurancaHandler(e:SecurityErrorEvent):void{
				trace('Erro de segurança'+e.text + 'n');
		}
		private function completoHandler(e:Event):void{
				trace('Carregado com sucesso'+'n');
		}
	}
}
Actionscript/ Actionscript Frameworks/ AMFPHP/ Flex/ Open-source

Gerar PDF de sua aplicação Flex para desenvolvedores PHP

Gerar PDF de sua aplicação Flex é super simples, existem hoje no mercado algumas soluções open-source para se gerar PDF à partir de sua aplicação Flex, a biblioteca que vou usar neste exemplo é a APDF uma biblioteca gratuita e que serve apenas para desenvolvedores que usam o php como linguagem de server-side.
Claro que você pode por outra vez usar outra linguagem de server-side para gerar o documento em PDF para asp por exemplo ou até para Java, mais ai já é por sua conta e risco.

Limitações do aPDF:

  • Não suporta PNG
  • Não suporta rawData
  • Não suporta embed de fontes
  • Não suporta manipulação final do encoder do Acrobat Reader

Ingredientes usados:

aPDF
Baixe a versão que usa o as3corelib, para fazer o encoder de imagem.

Primeiro passo que vou fazer é adicionar conteúdo ao meu aplicativo, para isso copie o código abaixo e coloque em seu aplicativo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application backgroundColor="#f4f4f4" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
</mx><mx :XML id="lista" xmlns="">
	<root>
			<pedidos>
					<pedido>
					     <produto>
					     	<nome>Escova dentária</nome>
					     	<valor>400</valor>
					     </produto>
					     <produto>
					     	<nome>Creme Dental</nome>
					     	<valor>100</valor>
					     </produto>
					     <produto>
					     	<nome>Fio Dental</nome>
					     	<valor>50</valor>
					     </produto>
					     <produto>
					    	<nome>Sabonete</nome>
					    	<valor>10</valor>
					     </produto>
					</pedido>
			</pedidos>
	</root>
</mx>
 
	<mx :VDividedBox height="100%" width="100%">
	</mx><mx :VBox width="100%" height="50%">
		</mx><mx :ColumnChart dataProvider="{lista.pedidos.pedido.produto}" id="graficocoluna" width="100%" height="100%">
 
		</mx><mx :horizontalAxis>
					<mx :CategoryAxis dataProvider="{lista.pedidos.pedido.produto}" categoryField="nome"/>
			</mx><mx :series>
			</mx><mx :ColumnSeries displayName="Pedidos" yField="valor">
				</mx><mx :fill>
						<mx :SolidColor color="0x7BCE2A"/>
		<mx :Legend dataProvider="{graficocoluna}"/>
		</mx><mx :VBox width="100%" height="50%">
		</mx><mx :DataGrid dataProvider="{graficocoluna.dataProvider}" width="100%" height="100%">
			</mx><mx :columns>
				<mx :DataGridColumn headerText="Produto" dataField="nome"/>
				<mx :DataGridColumn headerText="Preço" dataField="valor"/>
			</mx>
 
		<mx :HBox width="100%" horizontalAlign="center" height="45" verticalAlign="middle">
			<mx :Button label="Gerar PDF"/>
		</mx>

Com o esqueleto pronto, é hora de programar o o aPDF para adicionar a imagem do gráfico e os resultados do datagrid para o documento pdf.

Primeiro passo é você baixar tanto a biblioteca aPDF e a as3corelib e coloca-las dentro da pasta src, lembre-se que ambas compartilham o mesmo diretório “com”, como diretório principal para o pacote de classes, então só jogar o as3corelib dentro do “com” e o apdf tbm, veja aqui como ficou o meu.

Caso você queira, só baixar aqui um arquevo zip que fiz para ambos, basta só arrastar o conteúdo desse zip para seu diretório src do projeto. Clique aqui para baixar o zip.

Outra coisa que fiz é colocar o diretório php que vem junto com o aPDF dentro do meu servidor XAMPP, na pasta htdocs.

Adicionando objetos ao meu arquevo PDF.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<mx :Script>
	< ![CDATA[
		import com.candymandesign.pdf.objects.APDFormat;
		import com.candymandesign.pdf.APDF;
 
				private var _pdfObject:APDF;
 
				public function gerarPDF():void{
 
						_pdfObject = new APDF();
						_pdfObject.addPage();
						_pdfObject.setPageSize(APDFormat.PAGE_SIZE_A4);
						_pdfObject.currentPage.addImage(graficocoluna,60,50,50);
						_pdfObject.export("http://localhost/apdf/apdf.php");
 
				}
	]]>
</mx>

Gerar a página em pdf é simples, veja que do código acima eu criei um objeto _pdfObject que deriva da instância da classe APDF, depois adiciono ai uma página com o método addPage().
Depois que executo o método addPage(), vou setar o formato desta minha página usando o método setPageSize(), no caso acima uso uma classe auxiliar que é a APDFFormat para gerar em A4; Logo eu pego a página atual ou seja currentPage e adiciono uma imagem usando o método addImage(), este método vem com parametros onde seto o primeiro que é o alvo ou seja uma imagem que venha da classe DisplayObject e depois seto a qualidade desta imagem que vai de zero até 100, o padrão dela é 60, e depois os valores de x, y para posicionar na página e larguar e altura da imagem.
No final de todo o processo de montar a página, etc, eu executo o método export, que aponta para meu arquevo apdf.php que recebe os valores e gera o pdf final.

O resultado do código final é o seguinte.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application backgroundColor="#f4f4f4" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
 
</mx><mx :Script>
	< ![CDATA[
		import com.candymandesign.pdf.objects.APDFormat;
		import com.candymandesign.pdf.APDF;
 
				private var _pdfObject:APDF;
 
				public function gerarPDF():void{
 
						_pdfObject = new APDF();
						_pdfObject.addPage();
						_pdfObject.setPageSize(APDFormat.PAGE_SIZE_A4);
						_pdfObject.currentPage.addImage(graficocoluna,60,50,50);
						_pdfObject.export("http://localhost/apdf/apdf.php");
 
				}
	]]>
</mx>
 
<mx :XML id="lista" xmlns="">
	<root>
			<pedidos>
					<pedido>
					     <produto>
					     	<nome>Escova dentária</nome>
					     	<valor>400</valor>
					     </produto>
					     <produto>
					     	<nome>Creme Dental</nome>
					     	<valor>100</valor>
					     </produto>
					     <produto>
					     	<nome>Fio Dental</nome>
					     	<valor>50</valor>
					     </produto>
					     <produto>
					    	<nome>Sabonete</nome>
					    	<valor>10</valor>
					     </produto>
					</pedido>
			</pedidos>
	</root>
</mx>
 
	<mx :VDividedBox height="100%" width="100%">
	</mx><mx :VBox width="100%" height="50%">
		</mx><mx :ColumnChart dataProvider="{lista.pedidos.pedido.produto}" id="graficocoluna" width="100%" height="100%">
 
			</mx><mx :horizontalAxis>
					<mx :CategoryAxis dataProvider="{lista.pedidos.pedido.produto}" categoryField="nome"/>
			</mx>
			<mx :series>
			</mx><mx :ColumnSeries displayName="Pedidos" yField="valor">
				</mx><mx :fill>
						<mx :SolidColor color="0x7BCE2A"/>
				</mx>
 
 
 
		<mx :Legend dataProvider="{graficocoluna}"/>
 
 
	<mx :VBox width="100%" height="50%">
		</mx><mx :DataGrid dataProvider="{graficocoluna.dataProvider}" width="100%" height="100%">
			</mx><mx :columns>
				<mx :DataGridColumn headerText="Produto" dataField="nome"/>
				<mx :DataGridColumn headerText="Preço" dataField="valor"/>
			</mx>
 
		<mx :HBox width="100%" horizontalAlign="center" height="45" verticalAlign="middle">
			<mx :Button label="Gerar PDF" click="gerarPDF()"/>
		</mx>

Ok, até ai tudo bem, geramos nosso primeiro PDF, só que é simples demais, vamos tentar adicionar uma série de opções ao meu pdf.

Outro exemplo é a adição de textos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
	</mx><mx :Script>
		< ![CDATA[
			import com.candymandesign.pdf.objects.APDFDocumentInfo;
			import com.candymandesign.pdf.objects.APDFormat;
			import com.igorcosta.ArquevoPDFUtil;
			import com.candymandesign.pdf.APDF;
 
 
			public function gerarPDF():void{
					var cms:APDF = new APDF();
					cms.addPage();
					cms.currentPage.addText(texto.text,10,10);
					cms.setOrientation(APDFormat.PORTRAIT);
					cms.export("http://localhost/apdf/apdf.php");
			}
 
		]]>
	</mx>
 
	<mx :Button x="500" y="370" label="Gerar PDF" click="gerarPDF()"/>
	<mx :RichTextEditor id="texto" x="239" y="31" title="Editor" width="570" height="331">
	</mx>

Criando um gerenciador de controle de impressão

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
</mx><mx :Script>
	< ![CDATA[
		import com.candymandesign.pdf.objects.APDFormat;
		import com.candymandesign.pdf.APDF;
 
			private var _arquevo:APDF;
 
			public function gerarPDF():void{
					_arquevo = new APDF();
					for (var i:int=1;i<=pgNumers.value;i++){
						_arquevo.addPage(String(i));
					}
					for (var j:int=0;j <_arquevo.getNumberOfPages();j++){
 
						_arquevo.getPageByID(j).addText("Algum texto criado",10,10,20);
					}
 					switch (formatoPage.selectedIndex){
							case 0:
									_arquevo.setPageSize(APDFormat.PAGE_SIZE_LETTER);
									break;
							case 1:
									_arquevo.setPageSize(APDFormat.PAGE_SIZE_A3);
									break;
							case 2:
									_arquevo.setPageSize(APDFormat.PAGE_SIZE_A4);
									break;
							case 3:
									_arquevo.setPageSize(APDFormat.PAGE_SIZE_A5);
									break;
 
							case 4: _arquevo.setPageSize(APDFormat.PAGE_SIZE_LEGAL);
									break;
 
							default:
									_arquevo.setPageSize(APDFormat.PAGE_SIZE_A4);
									break;
					}
						switch (orientacaoPage.selectedIndex){
								case 0:
									_arquevo.setOrientation(APDFormat.LANDSCAPE);
									break;
								case 1:
									_arquevo.setOrientation(APDFormat.PORTRAIT);
									break;
 
								default:
									_arquevo.setOrientation(APDFormat.PORTRAIT);
									break;
						}
		 				_arquevo.export("http://localhost/apdf/apdf.php");
			}
	]]>
</mx>
	<mx :Panel width="374" height="218" layout="absolute" title="Gerenciador APDF" x="10" top="27">
		</mx><mx :Form x="21" y="25">
			</mx><mx :FormItem label="Número de paginas">
				<mx :NumericStepper id="pgNumers" value="1" minimum="1" maximum="100" stepSize="1"/>
			</mx>
			<mx :FormItem label="Formato da pagina">
				</mx><mx :ComboBox id="formatoPage">
				</mx><mx :Array>
					</mx><mx :String> Carta </mx>
					<mx :String> A3 </mx>
					<mx :String> A4 </mx>
					<mx :String> A5 </mx>
					<mx :String> Legal </mx>
 
 
 
			<mx :FormItem label="Orientação">
				</mx><mx :ComboBox id="orientacaoPage">
				</mx><mx :Array>
					</mx><mx :String>Paisagem</mx>
					<mx :String>Vertical</mx>
 
 
 
 
		<mx :Button x="259" y="143" label="Gerar PDF" click="gerarPDF()"/>

Embora eu tenha usado o aPDF, ainda tem assunto para o próximo post, que neste caso usarei uma biblioteca mais robusta que o aPDF que é o alivePDF.

[Update] Alguns códigos exibidos neste post podem não aparecer corretamente, devido a um problema antigo em um plug-in para exibir código fonte. Pedimos desculpas.

Actionscript/ AS 3.0/ Dev. Software/ Flex 3/ Flex Componentes/ Google/ Labs/ Open-source

Criando um tradutor em Flex usando o Google

Essa também veio lá do meu blog em inglês. Como criar uma ferramenta de tradução em Flex usando os recursos on-line que o google tem?

Google está cada vez mais entrando na esfera do Flash player e outras plataformas deixando-as consumir seus serviços, prova disso foi os outros testes feitos anteriormente à isso.

Para usar o serviço de tradução do Google é bem simples, ele respondendo com formato de dados em JSON, REST, XML, TXT no Flex fica mais fácil.

Para encurtar muito nessa explicação aqui abaixo você tem o código fonte da aplicação. Lembrando que para executá-la. É necessário você baixar o código fonte dele, devido ter algumas dependências de classes.

Código fonte

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="626">
	</mx><mx :Script>
		< ![CDATA[
			import mx.collections.ArrayCollection;
			import mx.rpc.events.ResultEvent;
			import com.adobe.serialization.json.JSON;
			[Bindable]public var googleText:String = "http://ajax.googleapis.com/ajax/services/language/" ;
			[Bindable]public var tsrc:String ="translate?v=1.0&q=";
			[Bindable]public var lanpair:String = "&langpair=";
			[Bindable]public var pairCode:String = "%7C";
			private function onJSONLoad(event:ResultEvent):void
			{
				var rawData:String = String(event.result);
				if(JSON.decode(rawData).responseData.translatedText !=null){
				var decoded:String =JSON.decode(rawData).responseData.translatedText;
				}else {
					decoded = "None support";
				}
				txtdest.text = decoded;
			}
		]]>
	</mx>
	<mx :Array id="langFrom">
		<mx :Object  value="auto" label="Select Language"/>
		<mx :Object  value="ar" label="Arabic"/>
		<mx :Object  value="bg" label="Bulgarian"/>
		<mx :Object  value="zh-CN" label="Chinese"/>
		<mx :Object  value="hr" label="Croatian"/>
		<mx :Object  value="cs" label="Czech"/>
		<mx :Object  value="da" label="Danish"/>
		<mx :Object  value="nl" label="Dutch"/>
		<mx :Object  value="en" label="English"/>
		<mx :Object  value="fi" label="Finnish"/>
		<mx :Object  value="fr" label="French"/>
		<mx :Object  value="de" label="German"/>
		<mx :Object  value="el" label="Greek"/>
		<mx :Object  value="hi" label="Hindi"/>
		<mx :Object  value="it" label="Italian"/>
		<mx :Object  value="ja" label="Japanese"/>
		<mx :Object  value="ko" label="Korean"/>
		<mx :Object  value="no" label="Norwegian"/>
		<mx :Object  value="pl" label="Polish"/>
		<mx :Object  value="pt" label="Portuguese"/>
		<mx :Object  value="ru" label="Russian"/>
		<mx :Object  value="es" label="Spanish"/>
		<mx :Object  value="sv" label="Swedish"/>
	</mx>
	<mx :Array id="langTo">
		<mx :Object  value="ar" label="Arabic"/>
		<mx :Object  value="bg" label="Bulgarian"/>
		<mx :Object  value="zh-CN" label="Chinese (Simplified)"/>
		<mx :Object  value="zh-TW" label="Chinese (Traditional)"/>
		<mx :Object  value="hr" label="Croatian"/>
		<mx :Object  value="cs" label="Czech"/>
		<mx :Object  value="da" label="Danish"/>
		<mx :Object  value="nl" label="Dutch"/>
		<mx :Object  value="en" label="English"/>
		<mx :Object  value="fi" label="Finnish"/>
		<mx :Object  value="fr" label="French"/>
		<mx :Object  value="de" label="German"/>
		<mx :Object  value="el" label="Greek"/>
		<mx :Object  value="hi" label="Hindi"/>
		<mx :Object  value="it" label="Italian"/>
		<mx :Object  value="ja" label="Japanese"/>
		<mx :Object  value="ko" label="Korean"/>
		<mx :Object  value="no" label="Norwegian"/>
		<mx :Object  value="pl" label="Polish"/>
		<mx :Object  value="pt" label="Portuguese"/>
		<mx :Object  value="ru" label="Russian"/>
		<mx :Object  value="es" label="Spanish"/>
		<mx :Object  value="sv" label="Swedish"/>
	</mx>
	<mx :ComboBox id="langFromCbx" prompt="Select a language" x="28.5" y="64" dataProvider="{langFrom}"/>
	<mx :HTTPService id="googleTransService"
		 url="{googleText + tsrc+txtsource.text + lanpair + String(langFromCbx.selectedItem.value)+pairCode+String(langToCbx.selectedItem.value)}"
		 useProxy="false" showBusyCursor="true" result="onJSONLoad(event)"  resultFormat="text"/>
	<mx :TextArea id="txtsource" x="28.5" y="124" width="569" height="116"/>
	<mx :TextArea id="txtdest" x="28.5" y="274" width="569" height="248"/>
	<mx :Button x="473.5" y="61" label="Translate" click="googleTransService.send()" width="124" height="28"/>
	<mx :ComboBox id="langToCbx" x="222.5" y="64" prompt="Select a language" dataProvider="{langTo}"></mx>
	<mx :Label x="30.5" y="45" text="Translate from:"/>
	<mx :Label x="28.5" y="98" text="Text to Translate"/>
	<mx :Label x="28.5" y="248" text="Result Text translated"/>
	<mx :Label x="222.5" y="45" text="Translate To:"/>
[Update] Alguns códigos exibidos neste post podem não aparecer corretamente, devido a um problema antigo em um plug-in para exibir código fonte. Pedimos desculpas.

Actionscript/ AS 3.0/ Dicas

#3 Performance em AS3.0 [Funções em pacotes]

O que são funções em pacotes? São exatamente funções que são de ambito e uso em geral do pacote da classe sem estar preso ou associado a classe em questão.

Mais eu consigo isso usando static functions e métodos à partir da instancia de um objeto.

A diferença significativa é apenas no nível de acesso e na flexibilidade que isso pode me trazer. Por exemplo o SDK do Flex usa o pacote global do Flash Player que tem muito disso entre outras classes.

E qual é sintaxe disso?

Veja o exemplo abaixo:

1
2
3
4
5
6
7
package com.igorcosta.performancetips
 
{
		public function DividirPorDois(a:int):int {
			return a*.5;
		}
}

Uso da técnica:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.igorcosta.performancetips
{
	import com.igorcosta.performancetips.createSnapShot;
 
	public class Teste
	{
		public function Teste()
		{
 
			DividirPorDois(5);
		}
 
 
 
	}
}

Detalhe que esse tipo de técnica é usada dentro de outras classes, caso você tente usar no MXML principal você não consegue. Como também se preocupar em não usar o this para esses tipos de implementações, tente torna-los o mais genérico possível.

Fonte: http://www.jibbering.com/faq/faq_notes/closures.html
http://www.ericfeminella.com/blog/2008/05/06/package-level-function-closures-in-actionscript/