<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7090724980506392645</id><updated>2012-02-17T01:14:24.959-02:00</updated><category term='assíncrono'/><category term='StrinUtil'/><category term='formatar'/><category term='substitute'/><category term='abrir'/><category term='swc'/><category term='efeitos'/><category term='as3'/><category term='libary'/><category term='processamento'/><category term='TextInput'/><category term='contextmenu'/><category term='dataGrid'/><category term='personalizar'/><category term='Descrição'/><category term='componente'/><category term='MenuBar'/><category term='Inspectable'/><category term='transição'/><category term='projeto'/><category term='CheckBox'/><category term='botão direito'/><category term='valor'/><category term='usabilidade'/><category term='AutoComplete'/><category term='Flex'/><category term='comparar'/><category term='botão'/><category term='Quebra'/><category term='tamanho'/><category term='tree'/><category term='Linha'/><category term='DateField'/><category term='enter'/><title type='text'>Eduardo Armstrong Correnti</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-3103564445016279664</id><published>2011-09-11T20:01:00.002-03:00</published><updated>2011-09-11T20:14:43.454-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quebra'/><category scheme='http://www.blogger.com/atom/ns#' term='CheckBox'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='componente'/><category scheme='http://www.blogger.com/atom/ns#' term='personalizar'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='usabilidade'/><category scheme='http://www.blogger.com/atom/ns#' term='Linha'/><title type='text'>CheckBox com quebra de linha</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Blz?! Depois de quase um ano sem postrar nada essa dica é bem interessante. O componente &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;CheckBox padrão do Flex não faz quebra de linha oque na minha opinião é uma tremenda furada por parte da Adobe mas como quase sempre há um "jeitinho", este é mais um deles. O componente deste artigo faz a quebra de linha do texto do checkBox e é importante salientar que a quebra é feita pela propriedade width sendo assim não é necessário colocar "\n" no texto.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Source da classe&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;package {&lt;br /&gt;&lt;br /&gt;  import flash.text.TextFieldAutoSize;&lt;br /&gt;  &lt;br /&gt;  import mx.controls.CheckBox;&lt;br /&gt;  &lt;br /&gt;  public class CheckBoxMultLine extends CheckBox {&lt;br /&gt;    public function CheckBoxMultLine() {&lt;br /&gt;      super();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    override protected function createChildren(): void {&lt;br /&gt;      super.createChildren();&lt;br /&gt;  &lt;br /&gt;      textField.wordWrap = true;&lt;br /&gt;      textField.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    override protected function updateDisplayList(unscaledWidth: Number, unscaledHeight: Number):void {&lt;br /&gt;      super.updateDisplayList(unscaledWidth, unscaledHeight);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Exemplo&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="250" width="400"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/MultLineCheckBox.swf" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;param name="quality" value="high" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/MultLineCheckBox.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="400" height="250"&gt; &lt;/embed&gt;&lt;/object&gt; &lt;br /&gt;&lt;br /&gt;Obs.: O mesmo pode ser feito com o RadioButton&lt;br /&gt;&lt;br /&gt;Bons estudos e bom trabalho a todos.&lt;br /&gt;&lt;br /&gt;Abraços&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-3103564445016279664?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/3103564445016279664/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2011/09/checkbox-com-quebra-de-linha.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/3103564445016279664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/3103564445016279664'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2011/09/checkbox-com-quebra-de-linha.html' title='CheckBox com quebra de linha'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-4116427315959589614</id><published>2010-12-27T22:15:00.005-02:00</published><updated>2011-08-27T12:02:33.555-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='componente'/><category scheme='http://www.blogger.com/atom/ns#' term='AutoComplete'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='TextInput'/><title type='text'>AutoComplete extends TextInput</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;Quando comecei a trabalhar com Flex um dos componentes mais bacanas que eu encontrei foi o&lt;i style="color: blue;"&gt; &lt;b&gt;&lt;a href="http://examples.adobe.com/flex2/exchange/AutoComplete/AutoCompleteCountriesData/AutoCompleteCountriesData.html" TARGET='_blank'&gt;AutoComplete&lt;/a&gt;&lt;/b&gt;&lt;/i&gt; da Adobe.&lt;a name='more'&gt;&lt;/a&gt; &lt;br /&gt;Mas olhando o source o compenente vi que é baseado em um ComboBox oque para mim não ajuda muito porque eu já tenho um componente baseado no TextInput que contém várias implementações, máscara, UpperCase, Numerico, ou seja, ter que reescrever essas implementações para o AutoComplete seria perder tempo e aumentar o nível de complexidade de manutenção, oque é um tiro no pé e como eu não gosto de atirar no meu pé eu escrevi o componente FAutoComplete que é baseado em um TextInput. Vão observar que eu fiz extends para o FTextInput, basta substituir por TextInput.&lt;br /&gt;&lt;br /&gt;Há comentários no fonte então a história acaba aqui e vamos ao source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Source da classe&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;package Componente {&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;  import flash.events.KeyboardEvent;&lt;br /&gt;  &lt;br /&gt;  import mx.collections.ArrayCollection;&lt;br /&gt;  import mx.controls.ComboBox;&lt;br /&gt;  import mx.controls.TextInput;&lt;br /&gt;  import mx.events.DropdownEvent;&lt;br /&gt;  &lt;br /&gt;  public class FAutoComplete extends FTextInput {&lt;br /&gt;    private var&lt;br /&gt;      FField: String = '',&lt;br /&gt;      FDataProvider: ArrayCollection = new ArrayCollection(),&lt;br /&gt;      _uCombo: ComboBox = new ComboBox();&lt;br /&gt;    &lt;br /&gt;    [Inspectable(&lt;br /&gt;      category = "eduarmstrong", &lt;br /&gt;      defaultValue = ""&lt;br /&gt;    )]&lt;br /&gt;    public function get LabelField(): String {&lt;br /&gt;      return(FField);&lt;br /&gt;    }&lt;br /&gt;    public function set LabelField(AField: String): void {&lt;br /&gt;      FField = AField;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    [Inspectable(&lt;br /&gt;      category = "eduarmstrong", &lt;br /&gt;      defaultValue = ""&lt;br /&gt;    )]&lt;br /&gt;    public function get DataProvider(): ArrayCollection {&lt;br /&gt;      return FDataProvider;&lt;br /&gt;    }&lt;br /&gt;    public function set DataProvider(ADataProvider: ArrayCollection): void {&lt;br /&gt;      var&lt;br /&gt;        I: int;&lt;br /&gt;        &lt;br /&gt;      // Faz add do todos os item usando um for para não alterar a estrutura do arrayCollection&lt;br /&gt;      for (I = 0; I &amp;lt; ADataProvider.length; I++)  &lt;br /&gt;        FDataProvider.addItem(ADataProvider[I]);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public function FAutoComplete() {&lt;br /&gt;      // Listener para os eventos observados&lt;br /&gt;      addEventListener(Event.CHANGE, proChangeEvent);&lt;br /&gt;      addEventListener(KeyboardEvent.KEY_DOWN, proKeyDownEvent);&lt;br /&gt;      super();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function proKeyDownEvent(EvKey: KeyboardEvent): void {&lt;br /&gt;      // Quando o usuário pressionar a seta para baixo muda o foco para comboBox&lt;br /&gt;      if (EvKey.keyCode == 40) {&lt;br /&gt;        if (_uCombo.visible)&lt;br /&gt;          _uCombo.setFocus();&lt;br /&gt;      }&lt;br /&gt;      // Quando usuário pressionar Ctrl + ESPAÇO abre a lista completa  &lt;br /&gt;      else if (EvKey.ctrlKey &amp;amp;&amp;amp; EvKey.keyCode == 32) {&lt;br /&gt;        // Removo o filtro&lt;br /&gt;        FDataProvider.filterFunction = null;&lt;br /&gt;        FDataProvider.refresh();&lt;br /&gt;        // Exibe a comboBox&lt;br /&gt;        _uCombo.open();&lt;br /&gt;        _uCombo.visible = true;&lt;br /&gt;        _uCombo.selectedIndex = 0;&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function proChangeEvent(EvChange: Event): void {&lt;br /&gt;      if (text != '') {&lt;br /&gt;        FDataProvider.filterFunction = fncFiltraDataProvider;&lt;br /&gt;        FDataProvider.refresh();&lt;br /&gt;        &lt;br /&gt;        function fncFiltraDataProvider(Item: Object): Boolean {&lt;br /&gt;          var&lt;br /&gt;            _rConsiste: Boolean,&lt;br /&gt;            _rTamanho: int;&lt;br /&gt;         &lt;br /&gt;          // Tamanho da String digitada&lt;br /&gt;          _rTamanho = text.length;  &lt;br /&gt;          &lt;br /&gt;          // Filtro para simular like ' %' do SQL&lt;br /&gt;          if (String(Item[FField]).toUpperCase().substr(0, _rTamanho) == text.toUpperCase())&lt;br /&gt;            _rConsiste = true;&lt;br /&gt;          else&lt;br /&gt;            _rConsiste = false;&lt;br /&gt;          &lt;br /&gt;          return _rConsiste;&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        /* Depois de aplicar a filterFunction se ainda "existir" &lt;br /&gt;        dados no arrayCollection abre a comboBox */&lt;br /&gt;        if (FDataProvider.length &amp;gt; 0) {&lt;br /&gt;          _uCombo.open();&lt;br /&gt;          _uCombo.visible = true;&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;          proHideCombo();&lt;br /&gt;      }&lt;br /&gt;      else&lt;br /&gt;        proHideCombo();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private function proHideCombo(): void {&lt;br /&gt;      _uCombo.close();&lt;br /&gt;      _uCombo.visible = false;&lt;br /&gt;      setFocus();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private function proCloseComboBox(EvClose: DropdownEvent): void {&lt;br /&gt;      proHideCombo();&lt;br /&gt;      text = _uCombo.selectedItem.DS;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    override protected function createChildren(): void {&lt;br /&gt;      super.createChildren();&lt;br /&gt;      &lt;br /&gt;      // Configuração para comboBox&lt;br /&gt;      _uCombo.labelField = FField;&lt;br /&gt;      _uCombo.selectedIndex = - 1;&lt;br /&gt;      _uCombo.setStyle('arrowButtonWidth', '0');&lt;br /&gt;      _uCombo.editable = true;&lt;br /&gt;      _uCombo.visible = false;&lt;br /&gt;      _uCombo.addEventListener(DropdownEvent.CLOSE, proCloseComboBox);&lt;br /&gt;      _uCombo.dataProvider = FDataProvider;&lt;br /&gt;&lt;br /&gt;      addChild(_uCombo);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    override protected function updateDisplayList(w:Number, h:Number): void {&lt;br /&gt;      super.updateDisplayList(w, h);&lt;br /&gt;      &lt;br /&gt;      _uCombo.width = width;&lt;br /&gt;      _uCombo.x = 0;&lt;br /&gt;      _uCombo.y = (height + 2);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Como utilizar&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;[Bindable]&lt;br /&gt;private var&lt;br /&gt;  _rDado: ArrayCollection = new ArrayCollection([&lt;br /&gt;    {CD: '1', DS:'Andriano'},&lt;br /&gt;    {CD: '2', DS:'Adriana'},&lt;br /&gt;    {CD: '3', DS:'Ana'},&lt;br /&gt;    {CD: '4', DS:'Amanda'},&lt;br /&gt;    {CD: '5', DS:'Beatriz'},&lt;br /&gt;    {CD: '6', DS:'Beti'},&lt;br /&gt;    {CD: '7', DS:'Barbara'},&lt;br /&gt;    {CD: '8', DS:'Bia'},&lt;br /&gt;    {CD: '9', DS:'Francisco'},&lt;br /&gt;    {CD: '10', DS:'Fred'},&lt;br /&gt;    {CD: '11', DS:'Floriano'}&lt;br /&gt;  ]);&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; // DataProvider - Informa o ArrayCollection que servirá de base para o componente&lt;br /&gt; // LabelField - Qual field dentro do ArrayCollection deverá ser listado  &lt;br /&gt;&lt;br /&gt; &lt;componente:fautocomplete dataprovider="{_rDado}" labelfield="DS" width="233" x="83" y="101"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/componente:fautocomplete&gt;&lt;/pre&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="210" width="400"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/AutoComplete.swf" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;param name="quality" value="high" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/AutoComplete.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="400" height="210"&gt; &lt;/embed&gt;&lt;/object&gt; &lt;br /&gt;&lt;br /&gt;Bons estudos e bom trabalho a todos.&lt;br /&gt;&lt;br /&gt;Abraços&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-4116427315959589614?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/4116427315959589614/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/12/autocomplete-extends-textinput.html#comment-form' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/4116427315959589614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/4116427315959589614'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/12/autocomplete-extends-textinput.html' title='AutoComplete extends TextInput'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-883900353907835379</id><published>2010-11-16T22:39:00.004-02:00</published><updated>2010-11-16T22:46:50.752-02:00</updated><title type='text'>Consultar CEP - HTTPService</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;Depois de mais de 2 meses de inatividade desta vez ou mostrar aqui uma dica que um amigo (Felipe Cesarini) me passou. Esse post nada mais é que o Flex consumindo um &lt;a name='more'&gt;&lt;/a&gt;Webservices de consulta de CEP no caso do site www.buscarcep.com.br/ (não conheço ninguém da empresa, não estou ganhando um centavo), é um serviço muito bacana e vale a pena dar uma olhada com mais atenção.&lt;br /&gt;&lt;br /&gt;Faça o cadastro no site www.buscarcep.com.br/ e obter a chave de acesso.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Não me preocupei em fazer nenhuma grande validação antes de consumir o WS ou no retorno do mesmo o exemplo está preparado apenas para o caso "deu tudo certo", então recomendo se você for implementar isso na sua aplição de atenção ao tratamento de erros [;)]&lt;br /&gt;&lt;br /&gt;Agora chega de enrolação, vamos lá!&lt;br /&gt;&lt;br /&gt;Basta digitar o seu CEP e pressionar ENTER ou TAB, a chave de acesso deste exemplo só dá direito a 10 consultas por minuto então se não funcionar de primeira, aguarde um pouco.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;import mx.managers.CursorManager;&lt;br /&gt;import mx.rpc.events.ResultEvent;&lt;br /&gt;import mx.rpc.http.HTTPService;&lt;br /&gt;import mx.rpc.events.FaultEvent;&lt;br /&gt;import mx.controls.Alert;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[Bindable]&lt;br /&gt;private var&lt;br /&gt;  _uBucaCEP: HTTPService;&lt;br /&gt;&lt;br /&gt;private function proCreationComplete(): void {&lt;br /&gt;  // Iniciazila o serviço&lt;br /&gt;  _uBucaCEP = new HTTPService();&lt;br /&gt;  _uBucaCEP.method = 'POST';&lt;br /&gt;  _uBucaCEP.addEventListener(ResultEvent.RESULT, proCEPResultHandler, false, 0, true);&lt;br /&gt;  _uBucaCEP.addEventListener(FaultEvent.FAULT, proFaultEvent, false, 0, true);&lt;br /&gt;  _uBucaCEP.resultFormat = 'e4x'; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function proNR_CEPFocusOut(): void {&lt;br /&gt;  // Faz uma verificação simples antes de realizar a consulta&lt;br /&gt;  if (eNR_CEP.length == 8 &amp;&amp; !isNaN(parseInt(eNR_CEP.text))) {&lt;br /&gt;    CursorManager.setBusyCursor();&lt;br /&gt;    _uBucaCEP.url = 'http://www.buscarcep.com.br/?cep=' + eNR_CEP.text + '&amp;formato=xml&amp;chave=SUA_CHAVE_AQUI'&lt;br /&gt;   _uBucaCEP.send();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function proCEPResultHandler(Evento: ResultEvent):void {&lt;br /&gt;  var &lt;br /&gt;    _rResult: XMLList = new XMLList(new XML(Evento.result));&lt;br /&gt;  &lt;br /&gt;  CursorManager.removeAllCursors();&lt;br /&gt;  if (eNR_CEP.length == 8){&lt;br /&gt;    eNM_END.text = String(_rResult..bairro);&lt;br /&gt;    eCD_CIDADE.text = String(_rResult..ibge_municipio);&lt;br /&gt;    eNM_CIDADE.text = String(_rResult..cidade);&lt;br /&gt;    eSG_ESTADO.text = String(_rResult..uf);&lt;br /&gt;  } &lt;br /&gt;  else {&lt;br /&gt;    eNM_END.text = '';&lt;br /&gt;    eNM_BAIRRO.text = '';&lt;br /&gt;    eCD_CIDADE.text = '';&lt;br /&gt;    eNM_CIDADE.text = '';&lt;br /&gt;    eSG_ESTADO.text = '';&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function proFaultEvent(Evento: FaultEvent): void {&lt;br /&gt;  CursorManager.removeAllCursors();&lt;br /&gt;  Alert.show(Evento.message.toString());&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="210" width="400"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/ConsultaCEP.swf" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;param name="quality" value="high" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/ConsultaCEP.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="400" height="210"&gt; &lt;/embed&gt;&lt;/object&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bons estudos e bom trabalho a todos.&lt;br /&gt;&lt;br /&gt;Abraços&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-883900353907835379?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/883900353907835379/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/11/consultar-cep.html#comment-form' title='5 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/883900353907835379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/883900353907835379'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/11/consultar-cep.html' title='Consultar CEP - HTTPService'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-7525352494313182662</id><published>2010-09-07T09:50:00.003-03:00</published><updated>2010-09-07T09:52:59.322-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='StrinUtil'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='substitute'/><title type='text'>Substitute  - Classe StringUtil</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;Quantas vezes já aconteceu de você precisar de uma funcionalidade e pensar, "isso deveria existir em Flex" e acabou dando um "jeitinho" ? &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Se isso nunca aconteceu com você meus parabéns, comigo já e esse post é exatamente isso, precisava concatenar Strings, tinha um texto principal e no meio deste precisava colocar as informações de um formulário preenchido pelo usuário a primeira coisa que me lembrei foi do &lt;i&gt;&lt;u&gt;&lt;b&gt;printf&lt;/b&gt;&lt;/u&gt;&lt;/i&gt; existente no C e pesquisando encontrei o método substitute da classe StringUtil, veja o exemplo abaixo com é simples a implementação&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;import mx.utils.StringUtil;&lt;br /&gt;            &lt;br /&gt;[Bindable]&lt;br /&gt;private var _uMsg: String = 'Nome {0} \nEmpresa: {1} \nTelefone: {2}'; &lt;br /&gt;          &lt;br /&gt;private function proClickBtnSubstitue(): void {&lt;br /&gt;  mMsg.text = StringUtil.substitute(_uMsg, eNome.text, eEmp.text, eTel.text);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="230" width="450"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/TStringUtil.swf" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;param name="quality" value="high" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/TStringUtil.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="230"&gt; &lt;/embed&gt;&lt;/object&gt; &lt;br /&gt;&lt;br /&gt;Bons estudos e bom trabalho a todos.&lt;br /&gt;&lt;br /&gt;Abraços&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-7525352494313182662?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/7525352494313182662/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/09/substitute-classe-stringutil.html#comment-form' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/7525352494313182662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/7525352494313182662'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/09/substitute-classe-stringutil.html' title='Substitute  - Classe StringUtil'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-6775197507858832639</id><published>2010-07-17T01:56:00.006-03:00</published><updated>2010-07-18T13:40:20.043-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='componente'/><category scheme='http://www.blogger.com/atom/ns#' term='personalizar'/><category scheme='http://www.blogger.com/atom/ns#' term='DateField'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='usabilidade'/><title type='text'>Personalizando o componente DateField</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;Nesse post vou personalizar o componente DataField, vamos ver como usar a propriedade Inspectable já mostrada nesse &lt;a href="http://eduarmstrong.blogspot.com/2010/04/utilizando-tag-inspectable-para.html"&gt;post&lt;/a&gt;. &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Além da tradução para português o componente recebeu alguns funções/métodos para facilitar a vida no dia a dia.&lt;br /&gt;&lt;br /&gt;1 - DataInicial - Inicializa o componente com a data atual&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - parâmetros: Hoje ou Vazio &lt;br /&gt;2 - CheckDate - Faz a validação da data, mas não interrompe o processo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - parâmetros: true ou false&lt;br /&gt;3 - KeyDown - Função adicionada para melhorar a usabilidade do componente&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - abre o calendário quando o usuário pressionar a tecla ESPAÇO.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DataInicial e CheckDate você pode setar o valor em modo design equanto a propriedade para abrir o calendário que está atribuída ao evento KeyDown é default no componente e foi criada para melhorar a usabilidade do componente DateField, quanto menos o usuário necessitar do mouse melhor.&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;package {&lt;br /&gt;  import flash.events.FocusEvent;&lt;br /&gt;  import flash.events.KeyboardEvent;&lt;br /&gt;  &lt;br /&gt;  import mx.controls.Alert;&lt;br /&gt;  import mx.controls.DateField;&lt;br /&gt;  import mx.events.FlexEvent;&lt;br /&gt;  import mx.events.ValidationResultEvent;&lt;br /&gt;  import mx.validators.DateValidator;&lt;br /&gt;&lt;br /&gt;  public class FDateField extends DateField {&lt;br /&gt;    [Bindable]&lt;br /&gt;    private var&lt;br /&gt;      FDataInicial: String = 'Vazio',&lt;br /&gt;      FCheckDate: Boolean = true;&lt;br /&gt;      &lt;br /&gt;    [Inspectable(&lt;br /&gt;      category = "eduarmstrong", &lt;br /&gt;      enumeration = "Hoje,Vazio"&lt;br /&gt;    )]&lt;br /&gt;    public function get DataInicial(): String {&lt;br /&gt;      return(FDataInicial);&lt;br /&gt;    }&lt;br /&gt;    public function set DataInicial(ADataInicial: String): void {&lt;br /&gt;      FDataInicial = ADataInicial;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [Inspectable(&lt;br /&gt;      category = "eduarmstrong", &lt;br /&gt;      enumeration = "true,false"&lt;br /&gt;    )]&lt;br /&gt;    public function get CheckDate(): Boolean {&lt;br /&gt;      return(FCheckDate);&lt;br /&gt;    }&lt;br /&gt;    public function set CheckDate(ACheckDate: Boolean): void {&lt;br /&gt;      FCheckDate = ACheckDate;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public function FDateField() {&lt;br /&gt;      super();&lt;br /&gt;      // Legenda para os dias da semana&lt;br /&gt;      dayNames = ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'];&lt;br /&gt;      &lt;br /&gt;      // Formato para data&lt;br /&gt;      formatString = 'DD/MM/YYYY';&lt;br /&gt;      &lt;br /&gt;      // Restrict usado para evitar que o usuário digite A-Z&lt;br /&gt;      restrict = "0-9, /";&lt;br /&gt;      &lt;br /&gt;      // Tradução dos meses &lt;br /&gt;      monthNames = ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', &lt;br /&gt;        'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'];&lt;br /&gt;      &lt;br /&gt;      // Irá permitir que o usuário digite a data&lt;br /&gt;      editable = true;&lt;br /&gt;      &lt;br /&gt;      // Inicia o calendário no Domingo   &lt;br /&gt;      firstDayOfWeek = 0; &lt;br /&gt;      &lt;br /&gt;      // Habilita a navegação por ano.&lt;br /&gt;      yearNavigationEnabled = true;  &lt;br /&gt;      &lt;br /&gt;      width = 100;&lt;br /&gt;      &lt;br /&gt;      /* Adicionando ao evento de focusOut o método que irá colocar&lt;br /&gt;      máscara na data digitada pelo usuário */&lt;br /&gt;      addEventListener(FocusEvent.FOCUS_OUT, proSetMask, false, 0, true);&lt;br /&gt;      &lt;br /&gt;      /* Adiciona ao evento keyDown o método para "abrir" o calendário&lt;br /&gt;      ao pressionar ESPAÇO */&lt;br /&gt;      addEventListener(KeyboardEvent.KEY_DOWN, proKeyDown, false, 0, true);&lt;br /&gt;      &lt;br /&gt;      // Adicina ao evento creationComplete o método que irá preencher a data&lt;br /&gt;      addEventListener(FlexEvent.CREATION_COMPLETE, proDataInicial, false, 0, true);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private function proDataInicial(E: FlexEvent): void {&lt;br /&gt;      if (FDataInicial == 'Hoje')&lt;br /&gt;         data = new Date();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private function proKeyDown(E: KeyboardEvent): void {&lt;br /&gt;      // Espaço&lt;br /&gt;      if (E.keyCode == 32)&lt;br /&gt;        open();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function proSetMask(evFocus: FocusEvent): void {&lt;br /&gt;      if ((text.charAt(2) != '/') || (text.charAt(5) != '/')) {&lt;br /&gt;        if (text.length == 6)&lt;br /&gt;          text = text.substr(0, 2) + '/' + text.substr(2,2) + '/' + text.substr(4, 4);&lt;br /&gt;        else if (text.length == 8)&lt;br /&gt;          text = text.substr(0, 2) + '/' + text.substr(2,2) + '/' + text.substr(4, 4);&lt;br /&gt;      }&lt;br /&gt;      &lt;br /&gt;      // Verifica se a opção para validar a data está ativa&lt;br /&gt;      if (FCheckDate)&lt;br /&gt;        proCheckDate();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private function proCheckDate(): void {&lt;br /&gt;      var       &lt;br /&gt;        _rDateValidator: DateValidator = new DateValidator();&lt;br /&gt;        &lt;br /&gt;      _rDateValidator.source = this;&lt;br /&gt;      _rDateValidator.required = false;&lt;br /&gt;      _rDateValidator.property = 'text';&lt;br /&gt;      _rDateValidator.inputFormat = 'dd/mm/yyyy';&lt;br /&gt;      _rDateValidator.allowedFormatChars = '/-';&lt;br /&gt;      _rDateValidator.wrongDayError = 'Favor informar um dia válido para o mês.' &lt;br /&gt;      _rDateValidator.wrongLengthError = 'Favor informar a data no formato dd/mm/aaaa.' &lt;br /&gt;      _rDateValidator.wrongMonthError = 'Favor informar um mês entre 1 e 12.' &lt;br /&gt;      _rDateValidator.validate();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="250" width="450"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/FDataField.swf" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;param name="quality" value="high" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/FDataField.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="250"&gt; &lt;/embed&gt;&lt;/object&gt; &lt;br /&gt;&lt;br /&gt;Bons estudos e bom trabalho a todos.&lt;br /&gt;&lt;br /&gt;Abraços&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-6775197507858832639?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/6775197507858832639/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/07/personalizando-o-componente-datafield.html#comment-form' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/6775197507858832639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/6775197507858832639'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/07/personalizando-o-componente-datafield.html' title='Personalizando o componente DateField'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-1902315243076602952</id><published>2010-06-17T22:04:00.005-03:00</published><updated>2010-06-17T22:12:49.806-03:00</updated><title type='text'>Tire fotos dos seus componentes</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;A primeira vista o título pode soar no mínimo estranho, mas logo logo você vai entender e concordar (ou continuar achando que sou louco). &lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&amp;nbsp;Mas vamos ao que interessa, nesse post vou mostrar como você pode gerar uma imagem de qualquer componente da sua aplicação e apartir dai é só usar a criatividade. A classe responsável em "gerar a imagem" é a &lt;i style="color: #45818e;"&gt;UISnapShot &lt;/i&gt;e o restante é a parte do "usar a criatividade" &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;package Componente {&lt;br /&gt;  import flash.display.BitmapData;&lt;br /&gt;  import flash.geom.Matrix;&lt;br /&gt;  import flash.display.Bitmap;&lt;br /&gt;  import mx.controls.Image;&lt;br /&gt;  import mx.core.UIComponent;&lt;br /&gt;  &lt;br /&gt;  public class UISnapShot extends Image {&lt;br /&gt;    public function UISnapShot() {&lt;br /&gt;        /* Definindo largura e altura para que a imagem ocupe&lt;br /&gt;        100% do espaço onde for adicionada */&lt;br /&gt;        this.percentWidth = 100;&lt;br /&gt;        this.percentHeight = 100;&lt;br /&gt;        super();&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    public function set targetUI(Target: UIComponent): void {&lt;br /&gt;        // Método set para definir o alvo &lt;br /&gt;        drawUISnapShot(Target);&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    private function drawUISnapShot(Target: UIComponent): void {&lt;br /&gt;        var UIBData:BitmapData = new BitmapData(Target.width, Target.height);&lt;br /&gt;        var UIMatrix:Matrix = new Matrix();&lt;br /&gt;        UIBData.draw(Target, UIMatrix);&lt;br /&gt;        source = new Bitmap(UIBData);&lt;br /&gt;        invalidateDisplayList();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Agora que já vimos como "tirar foto do componente", vamos a parte de criatividade. Desde que eu instalei o W7 uma das poucas coisas que eu gostei foi a miniatura do aplicativo minimizado que aparece sempre que você coloca o mouse na barra de tarefas então para esse exemplo eu fiz uma classe bem simples para fazer as miniaturas das telas minimizadas na aplicação. E para isso eu fiz uma classe chamada FDockBarW7 (apesar de não ser uma dockBar foi o primeiro nome que me veio na cabeça).&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;package Componente {&lt;br /&gt;  import Function.FParam;&lt;br /&gt;  &lt;br /&gt;  import flash.events.MouseEvent;&lt;br /&gt;  import flash.events.TimerEvent;&lt;br /&gt;  import flash.utils.Timer;&lt;br /&gt;  &lt;br /&gt;  import mx.containers.Canvas;&lt;br /&gt;  import mx.core.UIComponent;&lt;br /&gt;  import mx.effects.Fade;&lt;br /&gt;&lt;br /&gt;  public class FDockBarW7 extends Canvas {&lt;br /&gt;    private var _uParam: FParam = FParam.getInstance();&lt;br /&gt;    private var _uParent: Object = new Object();&lt;br /&gt;    private var _uTarget: Object = new Object();&lt;br /&gt;    private var _uImgDock: UISnapShot = new UISnapShot();&lt;br /&gt;    &lt;br /&gt;    private static var _rInstance: FDockBarW7;&lt;br /&gt;    &lt;br /&gt;    public function FDockBarW7(Type: PrivateFDockBarW7) {&lt;br /&gt;      super();&lt;br /&gt;      addEventListener(MouseEvent.MOUSE_OVER, removeSnapShot);&lt;br /&gt;      if (Type == null)&lt;br /&gt;    throw new Error('Obtenha uma instância da classe usando o método getInstante().');&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public static function getInstance(): FDockBarW7 {&lt;br /&gt;   if (_rInstance == null)&lt;br /&gt;    _rInstance = new FDockBarW7 (new PrivateFDockBarW7());&lt;br /&gt;   return _rInstance;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;    public function showSnapShot(Parent: Object, Target: Object = null, Time: int = 3000): void {&lt;br /&gt;      var&lt;br /&gt;        _rTimer: Timer = new Timer(Time, 1);&lt;br /&gt;        &lt;br /&gt;      _rTimer.addEventListener(TimerEvent.TIMER, proRemove);&lt;br /&gt;      _rTimer.start();&lt;br /&gt;      &lt;br /&gt;      function proRemove(evTimer: TimerEvent): void {&lt;br /&gt;        dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OVER));&lt;br /&gt;      }    &lt;br /&gt;      _uParent = Parent;&lt;br /&gt;      _uTarget = Target;&lt;br /&gt;      &lt;br /&gt;      this.x = _uParent.x;&lt;br /&gt;      this.y = _uParent.y - 160;&lt;br /&gt;      _uImgDock.width = 300;&lt;br /&gt;      _uImgDock.height = 150;&lt;br /&gt;      &lt;br /&gt;      if (_uTarget != null)&lt;br /&gt;        _uImgDock.targetUI = _uTarget as UIComponent;&lt;br /&gt;      else&lt;br /&gt;        _uImgDock.targetUI = _uParent as UIComponent;&lt;br /&gt;       &lt;br /&gt;       this.addChild(_uImgDock);&lt;br /&gt;      &lt;br /&gt;      _uParam._sMDIApp.addChild(this);&lt;br /&gt;    }&lt;br /&gt;        &lt;br /&gt;    public function removeSnapShot(e: MouseEvent): void {&lt;br /&gt;      try {&lt;br /&gt;      // _sMDIApp é o canvas principal da minha aplicação&lt;br /&gt;        _uParam._sMDIApp.removeChild(this);&lt;br /&gt;      }&lt;br /&gt;      catch (e: Error){&lt;br /&gt;      &lt;br /&gt;      }&lt;br /&gt;    }    &lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;internal class PrivateFDockBarW7 {&lt;br /&gt;  public function PrivateFDockBarW7() {&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Já temos duas classes, UISnapShot para "tirar a foto" e a FDockBarW7 para montar a miniatura da janela. Nesse exemplo estou usando o MDIWindow.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;public static function openTela(Componente: DisplayObject, Caption: String): void {&lt;br /&gt;  var&lt;br /&gt;    _rDock: FDockBarW7 = FDockBarW7.getInstance(), &lt;br /&gt;    _rTela: MDIWindow = new MDIWindow();&lt;br /&gt;  &lt;br /&gt;  // Listener para detectar o mouse sobre a tela  &lt;br /&gt;  _rTela.addEventListener(MouseEvent.MOUSE_OVER, show);&lt;br /&gt;  &lt;br /&gt;  // Configuração da tela&lt;br /&gt;  _rTela.title = Caption;&lt;br /&gt;  _rTela.height = 400;&lt;br /&gt;  _rTela.width = 500;&lt;br /&gt;  _rTela.layout = 'vertical';&lt;br /&gt;  _rTela.addChild(Componente);&lt;br /&gt;  &lt;br /&gt;  /* _sMDIApp mais uma vez o canvas principal da aplicação&lt;br /&gt;  é o canvas de base usado pora adicionar telas, alert&lt;br /&gt;  personalizado entre outros . . .*/&lt;br /&gt;  _uFparam._sMDIApp.windowManager.add(_rTela);&lt;br /&gt;  &lt;br /&gt;  function show(e: MouseEvent): void {&lt;br /&gt;    // se a tela estiver minimizada . . .&lt;br /&gt;    if (_rTela.minimized)&lt;br /&gt;      _rDock.showSnapShot(_rTela, Componente);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;private function cliBntAbrirTela(): void {&lt;br /&gt;  var _r: FParam = FParam.getInstance();&lt;br /&gt;  var _t: Teste = new Teste();&lt;br /&gt;&lt;br /&gt;  _r._sMDIApp = cvApp;&lt;br /&gt; &lt;br /&gt;  FncUtil.openTela(_t, 'teste');&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://edu.armstrong.sites.uol.com.br/Swf/DockBarW7.swf"  target="_blank"&gt;Clique aqui para ver o exemplo&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;Bons estudos e bom trabalho a todos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Abraços&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-1902315243076602952?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/1902315243076602952/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/06/tire-fotos-dos-seus-componentes.html#comment-form' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/1902315243076602952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/1902315243076602952'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/06/tire-fotos-dos-seus-componentes.html' title='Tire fotos dos seus componentes'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-6029253821732843858</id><published>2010-06-06T10:04:00.005-03:00</published><updated>2010-06-06T10:38:53.333-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='assíncrono'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='processamento'/><title type='text'>Controlando o processamento assíncrono</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;Depois de mais de um mês sem postar nada desta vez vou mostrar uma maneira simples, porém muito eficaz de controlar o processamento assíncrono. Você já deve ter ficado com &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;muita raiva quando por exemplo existem dois métodos, o primeiro faz uma consulta a base de dados e o segundo toda uma decisão com base nas informações do primeiro método, mas a consulta demora mais que devia e o segundo método é executado como ainda não houve retorno do primeiro método de duas uma, blz não vai acontecer nada (oque já não é nada bom) ou vai "explodir" um erro na cara do usuário (ainda pior). Então para controlar isso vamos "amarrar" a execução dos métodos passando-os como parâmetro, nesse exemplo vão ver dois botões "Sem controle" e "Com controle". &lt;br /&gt;Sem controle é a chamada dos método da maneira tradicional onde você colocaria os métodos um logo abaixo do outro conforme a ordem de execução, já "Com controle" os métodos são passados na assinatura dos métodos (confuso? vai ficar mais tranquilo ao ver o código) assim quem foi passado somente será executado ao final do primeiro método.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;import mx.collections.ArrayCollection;&lt;br /&gt;import mx.controls.Alert;&lt;br /&gt;import mx.managers.CursorManager;&lt;br /&gt;&lt;br /&gt;[Bindable]&lt;br /&gt;private var _uDado: ArrayCollection = new ArrayCollection();&lt;br /&gt;&lt;br /&gt;/* Na assinatura do método há um parâmetro do tipo Function que&lt;br /&gt;pode ou não ser informado dependendo da necessidade */&lt;br /&gt;private function metodoUm(OnRetorna: Function = null): void {&lt;br /&gt;  var&lt;br /&gt;    _rResult: Number,&lt;br /&gt;    I: int;&lt;br /&gt;  &lt;br /&gt;  CursorManager.setBusyCursor();&lt;br /&gt;  &lt;br /&gt;  // Um laço de repetição para simular uma operação "demorada"&lt;br /&gt;  for (I = 0; I &amp;lt;= 99999; I++) {&lt;br /&gt;    _rResult = (I * 90 + 88 / Math.PI + 9999 / .56 * 903.09); &lt;br /&gt;    _uDado.addItem(_rResult);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  /* Se for informado algum método ao "chamar" o métodoUm&lt;br /&gt;  é agora que ele será "chamado" */&lt;br /&gt;  if (OnRetorna != null)&lt;br /&gt;    OnRetorna();  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function metodoDois(): void {&lt;br /&gt;  // Bloco try para capturar o erro&lt;br /&gt;  try {&lt;br /&gt;    mResultado.text += '\n' + _uDado[99999];&lt;br /&gt;  }&lt;br /&gt;  catch (erro: Error) {&lt;br /&gt;    mResultado.text += '\n' + erro.message;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  // Remove o busy&lt;br /&gt;  CursorManager.removeAllCursors();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function clickBtnSemControle(): void {&lt;br /&gt;  /* Aqui a o modo "tradicional" onde os método são colocados&lt;br /&gt;  na ordem de execução */&lt;br /&gt;  metodoUm();&lt;br /&gt;  metodoDois();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function clickBtnComControle(): void {&lt;br /&gt;  // Aqui colocando um pouco mais de ordem nas coisas&lt;br /&gt;  metodoUm(metodoDois);&lt;br /&gt;}&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;i style="color: #6fa8dc;"&gt;Ps.: Nos testes o método "Sem controle" deu erro duas a cada dez execuções,&lt;/i&gt;&lt;br /&gt;&lt;i style="color: #6fa8dc;"&gt;portanto não se engane se ao executar o exemplo parecer que as duas maneiras&lt;/i&gt;&lt;br /&gt;&lt;i style="color: #6fa8dc;"&gt;sempre terão o mesmo resultado.&lt;/i&gt; &lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="300" width="500"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/Assincrono.swf" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;param name="quality" value="high" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/Assincrono.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="500" height="300"&gt; &lt;/embed&gt;&lt;/object&gt; &lt;br /&gt;&lt;br /&gt;Bons estudos e bom trabalho a todos.&lt;br /&gt;&lt;br /&gt;Abraços&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-6029253821732843858?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/6029253821732843858/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/06/controlando-o-processo-assincrono.html#comment-form' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/6029253821732843858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/6029253821732843858'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/06/controlando-o-processo-assincrono.html' title='Controlando o processamento assíncrono'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-3248260107168445769</id><published>2010-04-30T22:26:00.001-03:00</published><updated>2010-04-30T22:27:05.641-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dataGrid'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='comparar'/><title type='text'>Comparando datas</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;Nesse exemplo vou mostrar uma maneira fácil de fazer uma das piores coisas que existem (na minha opinião), comparar duas datas e saber qual é maior.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #b45f06;"&gt;&lt;i&gt;&lt;b&gt;DtCompare.mxml&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;br /&gt;&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" &lt;br /&gt;  applicationComplete="proCreationComplete()" layout="absolute" width="330" height="278"&gt;&lt;br /&gt;  &lt;mx:Script source="DtCompare.as"/&gt;&lt;br /&gt;  &lt;mx:DateField x="22" y="32" id="dt1"/&gt;&lt;br /&gt;  &lt;mx:DateField x="130" y="32" id="dt2"/&gt;&lt;br /&gt;  &lt;mx:Button x="228" y="32" label="Comparar" id="btnComparar" click="proClickBtnComparar()"/&gt;&lt;br /&gt;  &lt;mx:TextArea x="22" y="62" width="290" height="190" id="mResultado" textAlign="center"/&gt;&lt;br /&gt;&lt;/mx:Application&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06;"&gt;DtCompare.as&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;import mx.utils.ObjectUtil;&lt;br /&gt;&lt;br /&gt;private function proCreationComplete(): void {&lt;br /&gt;  var&lt;br /&gt;    _rNow: Date = new Date(); &lt;br /&gt;  /* Configurando o componente para padrão brasileiro&lt;br /&gt;  eu recomendo fazer um componente para isso, mas p/&lt;br /&gt;  esse exemplo esse tipo de configuração basta */  &lt;br /&gt;  dt1.monthNames = ['Janeiro', 'Fevereiro', &lt;br /&gt;    'Março', 'Abril', 'Maio', 'Junho', 'Julho', &lt;br /&gt;    'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'];&lt;br /&gt;  dt1.dayNames = ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'];&lt;br /&gt;  dt1.formatString = 'DD/MM/YYYY';&lt;br /&gt;  dt1.firstDayOfWeek = 0; &lt;br /&gt;  dt1.yearNavigationEnabled = true;&lt;br /&gt;  &lt;br /&gt;  dt2.monthNames = dt1.monthNames;&lt;br /&gt;  dt2.dayNames = dt1.dayNames;&lt;br /&gt;  dt2.formatString = dt1.formatString;&lt;br /&gt;  dt2.firstDayOfWeek = dt1.firstDayOfWeek; &lt;br /&gt;  dt2.yearNavigationEnabled = dt1.yearNavigationEnabled;&lt;br /&gt;  &lt;br /&gt;  dt1.data = _rNow; &lt;br /&gt;  dt2.data = _rNow; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function proClickBtnComparar(): void {&lt;br /&gt;  // Usando o método dateCompare da classe ObjectUtil&lt;br /&gt;  if (ObjectUtil.dateCompare(dt1.selectedDate, dt2.selectedDate) &lt; 0)&lt;br /&gt;    mResultado.text += dt1.text + ' &lt; ' + dt2.text + '\n';&lt;br /&gt;  else if (ObjectUtil.dateCompare(dt1.selectedDate, dt2.selectedDate) &gt; 0)&lt;br /&gt;    mResultado.text += dt1.text + ' &gt; ' + dt2.text + '\n';&lt;br /&gt;  else&lt;br /&gt;    mResultado.text += dt1.text + ' = ' + dt2.text + '\n';&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="278" width="330"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/DtCompare.swf" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;param name="quality" value="high" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/DtCompare.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="330" height="278"&gt; &lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bons estudos e bom trabalho a todos.&lt;br /&gt;&lt;br /&gt;Abraços&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-3248260107168445769?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/3248260107168445769/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/comparando-datas.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/3248260107168445769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/3248260107168445769'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/comparando-datas.html' title='Comparando datas'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-5754219478708390163</id><published>2010-04-26T20:56:00.001-03:00</published><updated>2010-04-26T21:02:33.402-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='MenuBar'/><title type='text'>MenuBar - dataProvider estático</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;Esse exemplo mostra como usar o componente MenuBar com um dataProvider estático, ou seja você já sabe todas as opções que devem existir.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #b45f06;"&gt;&lt;i&gt;&lt;b&gt;MnBar.mxml&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;&lt;mx:application applicationcomplete="proCreationComplete()" height="250" layout="absolute" width="400" xmlns:mx="http://www.adobe.com/2006/mxml"&gt;&lt;br /&gt;  &lt;mx:script source="MnBar.as"&gt;&lt;br /&gt;  &lt;mx:menubar horizontalcenter="0" id="mnBar" itemclick="proItemClick(event)" labelfield="@label" top="0" width="100%"&gt;&lt;br /&gt;&lt;/mx:menubar&gt;&lt;/mx:script&gt;&lt;/mx:application&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06;"&gt;MnBar.as&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;import mx.collections.XMLListCollection;&lt;br /&gt;import mx.controls.Alert;&lt;br /&gt;import mx.events.MenuEvent;&lt;br /&gt;&lt;br /&gt;private function proCreationComplete(): void {&lt;br /&gt;  var &lt;br /&gt;    _rNmDataProvider: XMLListCollection,&lt;br /&gt;    _rNnItem: XMLList =&lt;br /&gt;      &amp;lt;&amp;gt;&lt;br /&gt;        &lt;menuitem data="barra" label="Arquivo"&gt;&lt;br /&gt;          &lt;menuitem data="A1" label="Novo"&gt;&lt;br /&gt;          &lt;menuitem data="A2" label="Salvar"&gt;&lt;br /&gt;          &lt;menuitem data="A3" label="Abrir"&gt;&lt;br /&gt;        &lt;/menuitem&gt;&lt;br /&gt;        &lt;menuitem data="barra" label="Editar"&gt;&lt;br /&gt;          &lt;menuitem data="E1" label="Desfazer"&gt;&lt;br /&gt;          &lt;menuitem data="E2" label="Copiar"&gt;&lt;br /&gt;          &lt;menuitem data="E3" label="Colar"&gt;&lt;br /&gt;            &lt;menuitem data="E3-1" label="Especial"&gt;&lt;br /&gt;            &lt;menuitem data="E3-2" label="Somente texto"&gt;&lt;br /&gt;          &lt;/menuitem&gt;&lt;br /&gt;        &lt;/menuitem&gt;&lt;br /&gt;      ;&lt;br /&gt;&lt;br /&gt;   _rNmDataProvider = new XMLListCollection(_rNnItem);    &lt;br /&gt;   mnBar.dataProvider = _rNmDataProvider;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function proItemClick(e: MenuEvent):void  {&lt;br /&gt;  // Só irá mostrar o Alert nos sub-menus&lt;br /&gt;  if (e.item.@data != 'barra')&lt;br /&gt;    Alert.show('Opção: ' + e.item.@label + '\n' + &lt;br /&gt;      'Data: ' + e.item.@data, 'eduarmstrong');&lt;br /&gt;}&lt;br /&gt;&lt;/menuitem&gt;&lt;/menuitem&gt;&lt;/menuitem&gt;&lt;/menuitem&gt;&lt;/menuitem&gt;&lt;/menuitem&gt;&lt;/menuitem&gt;&lt;/pre&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="400" width="250"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/MnBar.swf" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;param name="quality" value="high" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/MnBar.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="400" height="250"&gt; &lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bons estudos e bom trabalho a todos.&lt;br /&gt;&lt;br /&gt;Abraços&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-5754219478708390163?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/5754219478708390163/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/menubar-dataprovider-estatico.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/5754219478708390163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/5754219478708390163'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/menubar-dataprovider-estatico.html' title='MenuBar - dataProvider estático'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-5950345700980266121</id><published>2010-04-15T11:30:00.011-03:00</published><updated>2010-04-26T19:45:28.890-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='Inspectable'/><category scheme='http://www.blogger.com/atom/ns#' term='componente'/><category scheme='http://www.blogger.com/atom/ns#' term='personalizar'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Utilizando a tag Inspectable para personalizar componentes</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;Nesse exemplo eu personalizei o coponente TextInput, atribuindo a ele uma função de UpperCase ao texto. Mas o que eu realmente quero mostrar é como montar a sua "paleta de propriedades" utilizand a tag Inspectable.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Leia a documentação da Adobe sobre Inspectable&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;package Componente {&lt;br /&gt;  import flash.events.Event;&lt;br /&gt;  &lt;br /&gt;  import mx.controls.TextInput;&lt;br /&gt;  &lt;br /&gt;  public class FTxtInput extends TextInput {&lt;br /&gt;    private var _uToUpperCase: Boolean;&lt;br /&gt;    &lt;br /&gt;    public function FTxtInput() {&lt;br /&gt;      super();&lt;br /&gt;       addEventListener(Event.CHANGE, changeEvent);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    [Inspectable(&lt;br /&gt;      category = "eduarmstrong", &lt;br /&gt;      enumeration = "true,false",&lt;br /&gt;      defaultValue = "false"&lt;br /&gt;    )]&lt;br /&gt;    &lt;br /&gt;    public function get UpperCase(): Boolean {&lt;br /&gt;      return(_uToUpperCase);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public function set UpperCase(Valor: Boolean): void {&lt;br /&gt;      _uToUpperCase = Valor;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private function changeEvent(e: Event): void {&lt;br /&gt;      if (_uToUpperCase)&lt;br /&gt;        text = text.toUpperCase();  &lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://edu.armstrong.sites.uol.com.br/blog/images/CustomProperty.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="188" src="http://edu.armstrong.sites.uol.com.br/blog/images/CustomProperty.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Foi criada a categoria eduarmstrong contendo a UpperCase&lt;br /&gt;&lt;br /&gt;Bons estudos e bom trabalho a todos.&lt;br /&gt;&lt;br /&gt;Abraços&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-5950345700980266121?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/5950345700980266121/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/utilizando-tag-inspectable-para.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/5950345700980266121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/5950345700980266121'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/utilizando-tag-inspectable-para.html' title='Utilizando a tag Inspectable para personalizar componentes'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-8149865087199639724</id><published>2010-04-14T12:35:00.013-03:00</published><updated>2010-04-24T13:38:50.607-03:00</updated><title type='text'>filterFunction - Estados X Cidades</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;Esse é um exemplo "clássico" onde a aplicação tem duas comboBox, estado e cidade,o usuário seleciona o estado e na combo de cidades serão listadas apenas as cidades do estado selecionado, para fazer isso vamos fazer uso de 2 ArrayCollection (estado e cidade) e para fazer o filtro a propriedade filterFunction&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;FilterFnc.mxml&lt;br /&gt;&lt;pre class="brush: as3"&gt;&lt;mx:application height="220" layout="absolute" width="390" xmlns:mx="http://www.adobe.com/2006/mxml"&gt;&lt;br /&gt;  &lt;mx:script source="FilterFnc.as"/&gt;&lt;br /&gt;  &lt;mx:combobox close="setFiltro()" dataprovider="{_uEstado}" id="cbxEstado" labelfield="estado"     selectedindex="-1" width="150" x="35" y="47"/&gt;&lt;br /&gt;  &lt;mx:combobox dataprovider="{_uCidade}" id="cbxCidade" labelfield="cid" selectedindex="-1" &lt;br /&gt;    width="150" x="200" y="47"/&gt;&lt;br /&gt;  &lt;mx:label color="#FCFCFC" fontweight="bold" text="Estado" x="35" y="21"/&gt;&lt;br /&gt;  &lt;mx:label color="#FCFCFC" fontweight="bold" text="Cidade" x="200" y="21"/&gt;&lt;br /&gt;  &lt;mx:button click="removeFiltro()" label="Remover filtro" x="10" y="188"/&gt;&lt;br /&gt;&lt;/mx:button&gt;&lt;br /&gt;&lt;/mx:label&gt;&lt;br /&gt;&lt;/mx:application&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;FilterFnc.as&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: as3"&gt;import mx.collections.ArrayCollection;&lt;br /&gt; &lt;br /&gt; [Bindable] &lt;br /&gt; private var _uEstado: ArrayCollection = new ArrayCollection([&lt;br /&gt;   {estado: 'Acre - AC', codEst: '1'},&lt;br /&gt;   {estado: 'Amazonas - AM', codEst: '2'},&lt;br /&gt;   {estado: 'Bahia - BA', codEst: '3'}&lt;br /&gt; ]);&lt;br /&gt; &lt;br /&gt; [Bindable]&lt;br /&gt; private var _uCidade: ArrayCollection = new ArrayCollection([&lt;br /&gt;   {codEst: '1', cid: 'Acrelandia - AC'},&lt;br /&gt;   {codEst: '2', cid: 'Alvaraes - AM'},&lt;br /&gt;   {codEst: '1', cid: 'Assis Brasil - AC'},&lt;br /&gt;   {codEst: '3', cid: 'Alagoinhas - BA'},&lt;br /&gt;   {codEst: '1', cid: 'Brasileia - AC'},&lt;br /&gt;   {codEst: '2', cid: 'Anori - AM'},&lt;br /&gt;   {codEst: '1', cid: 'Epitaciolandia - AC'},&lt;br /&gt;   {codEst: '3', cid: 'Acajutiba - BA'},&lt;br /&gt;   {codEst: '3', cid: 'Adustina - BA'},&lt;br /&gt;   {codEst: '1', cid: 'Cruzeiro do Sul - AC'},&lt;br /&gt;   {codEst: '1', cid: 'Capixaba - AC'},&lt;br /&gt;   {codEst: '2', cid: 'Amatura - AM'},&lt;br /&gt;   {codEst: '2', cid: 'Anama - AM'},&lt;br /&gt;   {codEst: '1', cid: 'Bujari - AC'},&lt;br /&gt;   {codEst: '2', cid: 'Apui - AM'},&lt;br /&gt;   {codEst: '3', cid: 'Abaira - BA'},&lt;br /&gt;   {codEst: '3', cid: 'Abare - BA'},&lt;br /&gt;   {codEst: '2', cid: 'Autazes - AM'},&lt;br /&gt;   {codEst: '2', cid: 'Atalaia do Norte - AM'},&lt;br /&gt;   {codEst: '3', cid: 'Aiquara - BA'},&lt;br /&gt;   {codEst: '3', cid: 'Agua Fria - BA'}&lt;br /&gt; ]);  &lt;br /&gt;&lt;br /&gt; private function setFiltro(): void {&lt;br /&gt;    _uCidade.filterFunction = fncFiltraCidade;&lt;br /&gt;    _uCidade.refresh();&lt;br /&gt;    cbxCidade.selectedIndex = 0;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; private function fncFiltraCidade(Item: Object): Boolean {&lt;br /&gt;   if (Item.codEst.search(cbxEstado.selectedItem.codEst) != -1)&lt;br /&gt;     return true;&lt;br /&gt;   else &lt;br /&gt;     return false;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; private function removeFiltro(): void {&lt;br /&gt;   cbxEstado.selectedIndex = -1;&lt;br /&gt;   cbxCidade.selectedIndex = -1;&lt;br /&gt;   _uCidade.filterFunction = null;&lt;br /&gt;   _uCidade.refresh();  &lt;br /&gt; }&lt;br /&gt; &lt;/pre&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="390" width="220"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/FilterFnc.swf" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;param name="quality" value="high" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/FilterFnc.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="390" height="220"&gt; &lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bons estudos e bom trabalho a todos.&lt;br /&gt;&lt;br /&gt;Abraços&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-8149865087199639724?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/8149865087199639724/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/filterfunction-estados-x-cidades.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/8149865087199639724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/8149865087199639724'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/filterfunction-estados-x-cidades.html' title='filterFunction - Estados X Cidades'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-8505649596430217773</id><published>2010-04-13T15:35:00.003-03:00</published><updated>2010-05-02T01:30:12.420-03:00</updated><title type='text'>DataGrid truncando informações</title><content type='html'>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Blz?!&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;É muito comum o uso do componente&amp;nbsp;DataGrid, por ser prático, fácil, mas alguma vezes as informações&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;insistem em ultrapassar o tamanho da coluna e você não tem como aumentar ainda mais o tamanho do componente com isso os dados ficam truncados. Para resolver esse problema (leia problema como opinião própria e não como tautologia), basta implementar o Label no itemRenderer do&amp;nbsp;DataGrid.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;No exemplo abaixo o primeiro DataGrid sem&amp;nbsp;itemRenderer e o segundo com&amp;nbsp;itemRenderer, notem que no segundo DataGrid quando o dado ultrapassa o tamanho da coluna são criados &lt;i&gt;3 pontinhos&lt;/i&gt;, assim que o usuário posicionar o mouse sobre o dado ele será exibido em um toolTip permitindo que todo conteúdo seja lido.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Basta adicionar na declaração do DataGrid:&amp;nbsp;&lt;i&gt;&lt;b&gt;itemRenderer="mx.controls.Label"&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="280" width="360"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/DtgLabel.swf" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;param name="quality" value="high" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/DtgLabel.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="280" height="360"&gt; &lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Bons estudos e bom trabalho a todos.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;i&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Abraços&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-8505649596430217773?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/8505649596430217773/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/datagrid-cortando-informacoes.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/8505649596430217773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/8505649596430217773'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/datagrid-cortando-informacoes.html' title='DataGrid truncando informações'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-6829825800253676337</id><published>2010-04-12T18:32:00.003-03:00</published><updated>2010-04-12T18:39:54.957-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='efeitos'/><category scheme='http://www.blogger.com/atom/ns#' term='transição'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Efeitos básicos, deixe a sua aplicação mais agradável</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;É muito importante quando se está desenvolvendo uma aplicação a confiabilidade na persistências dos dados, &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;a usabilidade de aplicação como um todo e para isso ficar mais agradável ao usuário pode-se fazer uso de efeitos de transição e se bem aplicados ganham pontos positivos do usuário final. Nesse exemplo veremos duas maneiras de aplicar efeitos de transição: usando a tag de efeito diretamente no mxml e também como fazer a mesma coisa com "actionScript puro".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt; ?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt; mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="380" height="192"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt; mx:Script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; ![CDATA[&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;import mx.effects.Sequence;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;import mx.effects.Move;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;import mx.effects.Blur;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;private function efeito(): void {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_rSeq: Sequence = new Sequence(),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_rMv: Move = new Move(),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_rRt: Rotate = new Rotate();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Configurando os efeitos&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_rMv.duration = 1000;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_rMv.xTo = 330;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_rMv.xFrom = 36;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_rRt.duration = 100;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_rRt.angleFrom = 45;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Agrupando os efeitos no parallel&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_rSeq.addChild(_rMv);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_rSeq.addChild(_rRt);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_rSeq.target = cvImg;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_rSeq.play(); &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;]]&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt; /mx:Script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt; !-- Montando o efeito apenas com as tags no mxml &amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt; mx:Parallel id="effPar"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt; mx:Rotate id="effRotate" duration="1000" angleFrom="45" target="{cvImg}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt; mx:Move target="{cvImg}" duration="1000" xTo="330" xFrom="40"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt; /mx:Parallel&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt; !-- Efeito usado para destacar o botão "Start - as" quando o mouse estiver sobre o mesmo --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt; mx:Blur duration="500" id="efBlur" target="{btnAs}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt; mx:Canvas id="cvImg" x="20" y="97" width="36" height="36" borderStyle="solid" cornerRadius="20" borderColor="#070707" backgroundColor="#B6B752"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; mx:Button x="12.6" y="0" label="Button" width="8.759999" height="34" enabled="false" cornerRadius="10" fillAlphas="[1.0, 1.0]" fillColors="[#114ECC, #040000]"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt; /mx:Canvas&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt; !-- Basta "acionar o play()" e pronto --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt; mx:Button x="20" y="10" label="Start - mxml" click="{effPar.play()}" height="30"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt; !-- Como o efeito está sendo construido totalmento no actionScript, chamamos um método --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt; mx:Button id="btnAs" x="126" y="9" label="Start - as" width="98" height="31" click="efeito()" mouseOver="{efBlur.play()}"/&amp;gt;&lt;br /&gt;&amp;lt; /mx:Application&amp;gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="380" width="192"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/Eff.swf" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;param name="quality" value="high" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/Eff.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="380" height="192"&gt; &lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Os dois botões possuem os mesmos efeitos e as mesmas configurações, o que diferencia o comportamento é a classe Parallel (executa seus filhos simultâneamente) e a classe Sequence (executa seus filhos um após o outro).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Outras classes de efeito:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Blur&lt;/li&gt;&lt;li&gt;Dissolve&lt;/li&gt;&lt;li&gt;Fade&lt;/li&gt;&lt;li&gt;Glow&lt;/li&gt;&lt;li&gt;Iris&lt;/li&gt;&lt;li&gt;Move&lt;/li&gt;&lt;li&gt;Resize&lt;/li&gt;&lt;li&gt;Rotate&lt;/li&gt;&lt;li&gt;Zoom&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Bons estudos e bom trabalho a todos.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;i&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Abraços&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-6829825800253676337?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/6829825800253676337/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/efeitos-basicos-deixe-sua-aplicacao.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/6829825800253676337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/6829825800253676337'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/efeitos-basicos-deixe-sua-aplicacao.html' title='Efeitos básicos, deixe a sua aplicação mais agradável'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-8810104116647381388</id><published>2010-04-11T21:34:00.001-03:00</published><updated>2010-04-11T21:35:43.333-03:00</updated><title type='text'>Binding - deixe o Flex trabalhar para você</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;Uma das funcionalidades mais interessantes da linguagem é o binding, vamos ver 3 maneiras de implementar &lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"Data binding lets you pass data between client-side objects in an Adobe® Flex® application. Binding automatically copies the value of a property of a source object to a property of a destination object when the source property changes."&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;"&lt;span class="long_text" id="result_box"&gt;&lt;span onmouseout="this.style.backgroundColor='#fff'" onmouseover="this.style.backgroundColor='#ebeff9'" style="background-color: white;" title="Data binding lets you pass data between client-side objects in an Adobe® Flex® application."&gt;Ligação de dados permite  transmitir dados entre os objetos do lado do cliente em um aplicativo  Adobe ® Flex ®. &lt;/span&gt;&lt;span onmouseout="this.style.backgroundColor='#fff'" onmouseover="this.style.backgroundColor='#ebeff9'" style="background-color: white;" title="Binding automatically copies the value of a property of a source object to a property of a destination object when the source property changes."&gt;Encadernação copia  automaticamente o valor de uma propriedade de um objeto de origem para  uma propriedade de um objeto de destino, quando muda a propriedade de  origem.&lt;/span&gt;&lt;/span&gt;"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt; ?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt; mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;applicationComplete="inicApp(event)"&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;layout="absolute"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; !-- TAG Binding usada no mxml --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; mx:Binding source="eIdade.text" destination="lbIdade.text"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; mx:Script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; ![CDATA[&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;import mx.binding.utils.BindingUtils;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;import mx.events.FlexEvent;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;private function inicApp(e: FlexEvent): void {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Utilizando a classe BindingUtils&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BindingUtils.bindProperty(lbTel, 'text', eTel, 'text');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;]]&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; /mx:Script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; mx:Form&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; mx:FormItem label="Nome: "&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; mx:TextInput id="eNome"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; /mx:FormItem&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; mx:FormItem label="Idade: "&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; mx:TextInput id="eIdade"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; /mx:FormItem&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; mx:FormItem label="Telefone: "&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; mx:TextInput id="eTel"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; /mx:FormItem&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; /mx:Form&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; !-- Setando diretamento o binding diretamente no componente --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt; mx:Label text="{eNome.text}" y="120"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt; mx:Label id="lbIdade" y="140"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt; mx:Label id="lbTel" y="160"/&amp;gt;&lt;br /&gt;&amp;lt; /mx:Application&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mais um exemplo rápido, fácil e prático, bons estudos e bom trabalho.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;span style="color: orange; font-size: large;"&gt;&lt;i&gt;Abraços&lt;/i&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-8810104116647381388?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/8810104116647381388/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/binding-deixe-o-flex-trabalhar-para.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/8810104116647381388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/8810104116647381388'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/binding-deixe-o-flex-trabalhar-para.html' title='Binding - deixe o Flex trabalhar para você'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-4153306345094853304</id><published>2010-04-09T17:57:00.002-03:00</published><updated>2010-04-12T18:31:56.912-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='botão direito'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='contextmenu'/><title type='text'>ContextMenu, rápido, prático e muito fácil</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;Desta vez vamos ver como fazer o famoso "botão direito", que para nós desenvolvedores é o &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;contextMenu, muito útil quando você quer adicionar uma funcionalidade específica a um componente e não quer encher a interface de botões.&lt;br /&gt;&lt;br /&gt;Nesse exemplo eu fiz a implementação do contextMenu em um dataGrid, mas pode-se usar em uma infinidade de componentes, só colocar a criatividade para funcionar, vamos lá . . .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;private function addContextMenu(): void {&lt;br /&gt;&amp;nbsp;&amp;nbsp;var&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;_rMenu: ContextMenu = new ContextMenu(),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;_rItem: ContextMenuItem = new ContextMenuItem('Mostrar detalhes');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;_rMenu.hideBuiltInItems();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;_rItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, mostrarDetalhe);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; _rMenu.customItems.push(_rItem);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; dtgPessoa.contextMenu = _rMenu;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; function mostrarDetalhe(e: ContextMenuEvent): void {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; Alert.show(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Nome: ' + dtgPessoa.selectedItem.nome + '\n' +&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'Idade: ' + dtgPessoa.selectedItem.idade + '\n' +&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'Tel: ' + dtgPessoa.selectedItem.tel);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; } &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="250" width="200"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/BntContext.swf" /&gt;&lt;/p&gt;&lt;p&gt;&lt;param name="quality" value="high" /&gt;&lt;/p&gt;&lt;p&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/BntContext.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="250" height="200"&gt; &lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;É isso ae, mais um exemplo simples, prático e rápido de ser implementado, não há nenhum tratamento de erro já que não é o objetivo do post ;)&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bons estudos e bom trabalho a todos.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Abraços&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-4153306345094853304?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/4153306345094853304/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/contextmenu-rapido-pratico-e-muito.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/4153306345094853304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/4153306345094853304'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/contextmenu-rapido-pratico-e-muito.html' title='ContextMenu, rápido, prático e muito fácil'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-5269022522223522244</id><published>2010-04-08T23:35:00.002-03:00</published><updated>2010-04-09T11:31:03.433-03:00</updated><title type='text'>DragDrog : DataGrid / TileList com ItemRenderer:</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Esse é um exemplo bem simples mas muito didático para a galera que está começando a brincar com Flex. &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Fiz um pequeno projeto para mostrar o DragDrop de dois componentes, DataGrid e TileList, não fiz nenhuma implementação complexa, utlizei apenas as proprieadades nativas dos componentes.&lt;br /&gt;&lt;br /&gt;Descrição do projeto &lt;br /&gt;&lt;br /&gt;1 - DataGrid&lt;br /&gt;2 - TileList&lt;br /&gt;2 - Componentes personalizados que são usados como itemRenderer, um em cada um dos TileList&lt;br /&gt;1 - Uma classe singleton para "guardar" os ArrayCollection que uso como dataProvider de cada compoentne.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: orange;"&gt;&lt;i&gt;&lt;b&gt;DragDrop.mxml&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PKKw4nSHEns/S76QjScNBMI/AAAAAAAAABw/9oscVTeuqjs/s1600/DragDrop_1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/_PKKw4nSHEns/S76QjScNBMI/AAAAAAAAABw/9oscVTeuqjs/s640/DragDrop_1.png" width="484" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;mx:canvas xmlns:mx="http://www.adobe.com/2006/mxml"&gt; &amp;nbsp; &lt;mx:label text="{data.nome}" x="90" y="21"&gt;&lt;br /&gt;&amp;nbsp; &lt;mx:label text="{data.idade}" x="5" y="21"&gt;&lt;br /&gt;&amp;nbsp; &lt;mx:label text="{data.tel}" x="59" y="0"&gt;&lt;br /&gt;&lt;/mx:label&gt;&lt;/mx:label&gt;&lt;/mx:label&gt;&lt;/mx:canvas&gt;&lt;i&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: orange;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;IR1&lt;/b&gt;&lt;/i&gt;&lt;i&gt;&lt;b&gt;.mxml&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PKKw4nSHEns/S76RNf09EXI/AAAAAAAAAB4/CpdkSPYuoNA/s1600/DragDrop_2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="195" src="http://3.bp.blogspot.com/_PKKw4nSHEns/S76RNf09EXI/AAAAAAAAAB4/CpdkSPYuoNA/s400/DragDrop_2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;&amp;nbsp; &lt;/b&gt;&lt;/i&gt;&lt;i style="color: orange;"&gt;&lt;b&gt;IR2.mxml&lt;/b&gt;&lt;/i&gt;&lt;i style="color: orange;"&gt;&lt;b&gt; &lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;mx:canvas xmlns:mx="http://www.adobe.com/2006/mxml"&gt;&lt;mx:label text="{data.nome}" x="90" y="21"&gt;&lt;mx:label text="{data.idade}" x="5" y="21"&gt; &lt;/mx:label&gt;&lt;/mx:label&gt;&lt;/mx:canvas&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PKKw4nSHEns/S76RdYwguhI/AAAAAAAAACA/i7wCYeFTnRk/s1600/DragDrop_3.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="178" src="http://2.bp.blogspot.com/_PKKw4nSHEns/S76RdYwguhI/AAAAAAAAACA/i7wCYeFTnRk/s400/DragDrop_3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;mx:canvas xmlns:mx="http://www.adobe.com/2006/mxml"&gt;&lt;mx:label text="{data.nome}" x="90" y="21"&gt;&lt;mx:label text="{data.idade}" x="5" y="21"&gt;&lt;br /&gt;&lt;/mx:label&gt;&lt;/mx:label&gt;&lt;/mx:canvas&gt;&lt;br /&gt;&lt;mx:canvas xmlns:mx="http://www.adobe.com/2006/mxml"&gt;&lt;mx:label text="{data.nome}" x="90" y="21"&gt;&lt;mx:label text="{data.idade}" x="5" y="21"&gt;&lt;br /&gt;&lt;/mx:label&gt;&lt;/mx:label&gt;&lt;/mx:canvas&gt;&lt;br /&gt;&lt;mx:canvas xmlns:mx="http://www.adobe.com/2006/mxml"&gt;&lt;mx:label text="{data.nome}" x="90" y="21"&gt;&lt;mx:label text="{data.idade}" x="5" y="21"&gt;&lt;br /&gt;&lt;/mx:label&gt;&lt;/mx:label&gt;&lt;/mx:canvas&gt;&lt;br /&gt;&lt;br /&gt;&lt;mx:canvas xmlns:mx="http://www.adobe.com/2006/mxml"&gt;&lt;mx:label text="{data.nome}" x="90" y="21"&gt;&lt;mx:label text="{data.idade}" x="5" y="21"&gt;&amp;nbsp;&lt;/mx:label&gt;&lt;/mx:label&gt;&lt;/mx:canvas&gt;&lt;i&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;i style="color: orange;"&gt;&lt;b&gt;Param.as&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PKKw4nSHEns/S76RooM_hZI/AAAAAAAAACI/dpP2OJEePdY/s1600/DragDrop_4.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="361" src="http://2.bp.blogspot.com/_PKKw4nSHEns/S76RooM_hZI/AAAAAAAAACI/dpP2OJEePdY/s400/DragDrop_4.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;mx:canvas xmlns:mx="http://www.adobe.com/2006/mxml"&gt;&lt;mx:label text="{data.nome}" x="90" y="21"&gt;&lt;mx:label text="{data.idade}" x="5" y="21"&gt;&lt;br /&gt;&lt;/mx:label&gt;&lt;/mx:label&gt;&lt;/mx:canvas&gt;&lt;br /&gt;&lt;mx:canvas xmlns:mx="http://www.adobe.com/2006/mxml"&gt;&lt;mx:label text="{data.nome}" x="90" y="21"&gt;&lt;mx:label text="{data.idade}" x="5" y="21"&gt;&lt;br /&gt;&lt;/mx:label&gt;&lt;/mx:label&gt;&lt;/mx:canvas&gt;&lt;br /&gt;&lt;mx:canvas xmlns:mx="http://www.adobe.com/2006/mxml"&gt;&lt;mx:label text="{data.nome}" x="90" y="21"&gt;&lt;mx:label text="{data.idade}" x="5" y="21"&gt;&lt;br /&gt;&lt;/mx:label&gt;&lt;/mx:label&gt;&lt;/mx:canvas&gt;&lt;br /&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="300" width="530"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/DragDrop.swf" /&gt;&lt;param name="quality" value="high" /&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/DragDrop.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="300" height="530"&gt; &lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;A aplicação é muito simples o objetivo principal é mostrar como é fácil, rápido e simples trabalhar com itemRenderer.&lt;br /&gt;&lt;br /&gt;Bons estudos e bom trabalho.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: orange; font-size: large;"&gt;&lt;i&gt;&lt;b&gt;Abraços&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-5269022522223522244?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/5269022522223522244/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/itemrenderer-datagrid-tilelist.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/5269022522223522244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/5269022522223522244'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/itemrenderer-datagrid-tilelist.html' title='DragDrog : DataGrid / TileList com ItemRenderer:'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_PKKw4nSHEns/S76QjScNBMI/AAAAAAAAABw/9oscVTeuqjs/s72-c/DragDrop_1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-3035313271962797835</id><published>2010-04-07T11:35:00.004-03:00</published><updated>2010-04-07T15:52:50.609-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='libary'/><category scheme='http://www.blogger.com/atom/ns#' term='swc'/><category scheme='http://www.blogger.com/atom/ns#' term='tamanho'/><category scheme='http://www.blogger.com/atom/ns#' term='projeto'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Reduzindo o tamanho final do swc</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;Essa dica é sobre deploy do projeto. Se você já fez uma libary (Flex Libary Project) deve ter notado que por mais simples que seja essa libary ela sempre passa fácil os 300 KB &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;isso porque quando você faz um novo projeto o framework é embutido no seu swc final, para que isso não ocorra basta alterar nas propriedades do projeto a maneira que a libary vai utilizar o framework, vamos lá . . .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A primeira imagem é uma libary simples onde eu tenho alguns componentes personalizados, funções que são úteis em vários projetos.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://edu.armstrong.sites.uol.com.br/blog/images/proj_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://edu.armstrong.sites.uol.com.br/blog/images/proj_1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;Esse projeto depois de compilado gera um swc de 851 KB é um arquivo muito grande, se o usuário final tem uma boa conexão de internet nem vai perceber isso, caso contrário vai ficar no mínimo insatisfeito com a demora para abri a aplicação.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://edu.armstrong.sites.uol.com.br/blog/images/proj_5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://edu.armstrong.sites.uol.com.br/blog/images/proj_5.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;Agora vamos melhorar removendo o framework de dentro desse swc, nas propriedades do projeto:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://edu.armstrong.sites.uol.com.br/blog/images/proj_2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="464" src="http://edu.armstrong.sites.uol.com.br/blog/images/proj_2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;Mude Link Type para "External" e clique em OK.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://edu.armstrong.sites.uol.com.br/blog/images/proj_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://edu.armstrong.sites.uol.com.br/blog/images/proj_3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;Agora vamos ver o resultado do mesmo projeto depois de compilado.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://edu.armstrong.sites.uol.com.br/blog/images/proj_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://edu.armstrong.sites.uol.com.br/blog/images/proj_4.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;De 851 KB para 51KB, uma mudança bem expressiva não?!&lt;br /&gt;&lt;br /&gt;Isso ae galera, bom trabalho e bons estudos a todos&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;i style="color: orange;"&gt;Abraços!&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-3035313271962797835?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/3035313271962797835/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/reduzindo-o-tamanho-final-do-swc.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/3035313271962797835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/3035313271962797835'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/04/reduzindo-o-tamanho-final-do-swc.html' title='Reduzindo o tamanho final do swc'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-6209752736041385271</id><published>2010-02-12T12:13:00.002-02:00</published><updated>2010-02-12T12:16:10.206-02:00</updated><title type='text'>Trabalhando com datas</title><content type='html'>Blz?!&lt;br /&gt;&lt;br /&gt;Mais um post, desta vez vou mostrar uma maneira bem simples de trabalhar com datas.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Já vi muita coisa no google sobre o assunto fazendo multiplicações complicadas de se entender, o que vou fazer nesse exemplo é deixar que o próprio Flex "pense". É necessário apenas indicar o que você quer fazer, somar/diminuir Dias, Meses, Anos, Horas, Segunds e até Milesegundos.&lt;br /&gt;&lt;br /&gt;private function fncSomaData(Data: Date, Qtde: Number, TpInc: String): Date {&lt;br /&gt;  var&lt;br /&gt;    _rData: Date = new Date(Data);  &lt;br /&gt;&lt;br /&gt;  _rData[TpInc] += Qtde;&lt;br /&gt;&lt;br /&gt;  return _rData; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Os parâmetros Date e Qtde são auto-explicáveis o mais importante mesmo é o TpInc, é ele que vai "falar" o que queremos somar/diminuir&lt;br /&gt;&lt;br /&gt;ano = 'fullYear'&lt;br /&gt;mes = 'month'&lt;br /&gt;dia = 'date'&lt;br /&gt;hora = 'hours'&lt;br /&gt;minuto = 'minutes'&lt;br /&gt;segundo = 'seconds'&lt;br /&gt;millesegundo = 'milliseconds'&lt;br /&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="202" width="274"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/KData.swf" /&gt;&lt;param name="quality" value="high" /&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/KData.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="274" height="202"&gt; &lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Abraços&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-6209752736041385271?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/6209752736041385271/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/02/trabalhando-com-datas.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/6209752736041385271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/6209752736041385271'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/02/trabalhando-com-datas.html' title='Trabalhando com datas'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-8650167658487667378</id><published>2010-02-08T22:30:00.005-02:00</published><updated>2010-02-12T12:12:46.651-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='enter'/><category scheme='http://www.blogger.com/atom/ns#' term='botão'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Disparar evento click do botão com Enter</title><content type='html'>Blz?! mais uma dica relacionada a usabilidade da aplicação. Primeiro vamos ao teste, coloque um botão e tente disparar o evento click usando o mouse FUNCIONA!! (óbvio), agora com ESPAÇO (opa, funciona tbm) e por ultimo tente com ENTER (não? wtf?!)&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para resolver o que na minha visão é um problema é bem simples, basta sobreescrever o método &lt;i&gt;keyDownHandler &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;package Exemplo {&lt;br /&gt;&amp;nbsp; import flash.events.KeyboardEvent;&lt;br /&gt;&amp;nbsp; import flash.events.MouseEvent;&lt;br /&gt;&amp;nbsp; import flash.ui.Keyboard;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; import mx.controls.Button;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; public class Botao extends Button {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function Botao() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; override protected function keyDownHandler(event: KeyboardEvent):void {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!enabled)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (event.keyCode == Keyboard.SPACE || event.keyCode == Keyboard.ENTER)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dispatchEvent(new MouseEvent(MouseEvent.CLICK));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="118" width="264"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/Tree.swf" /&gt;&lt;param name="quality" value="high" /&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/Botao.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="264" height="118"&gt; &lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Abraços&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-8650167658487667378?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/8650167658487667378/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/02/disparar-evento-click-do-botao-com.html#comment-form' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/8650167658487667378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/8650167658487667378'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/02/disparar-evento-click-do-botao-com.html' title='Disparar evento click do botão com Enter'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-7086398073462052676</id><published>2010-01-30T16:40:00.013-02:00</published><updated>2010-02-01T21:09:46.826-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dataGrid'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='valor'/><category scheme='http://www.blogger.com/atom/ns#' term='formatar'/><title type='text'>Formatando valores no dataGrid</title><content type='html'>BLz?! esse é um simples exemplo de como implementar funções para formatação de valores do dataGrid&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;i&gt;&lt;b&gt;1º - Faça uma nova clase, essa será a classe que iremos usar no dataGrid:&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #990000;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class="actionscript" name="code"&gt;package Exemplo {&lt;br /&gt;  public class labelFunction {&lt;br /&gt;    public function labelFunction() {&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public static function addBarra(Item: Object, C: Object): String {&lt;br /&gt;      if (Item[C.dataField] != undefined) &lt;br /&gt;        return adicionaBarra(Item[C.dataField]);&lt;br /&gt;      else&lt;br /&gt;        return '';&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private static function adicionaBarra(Valor: String): String {&lt;br /&gt;      return Valor + '/';&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;b&gt;&lt;i&gt;2º - Faça a chamada da classe no dataGrid:&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;labelFunction="labelFunction.addBarra"&lt;br /&gt;&lt;br /&gt;Obs.: Esse exemplo é apenas para mostrar como utlizar a propriedade labelFunction do dataGrid, agora é só colocar a criatividade para funcionar&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Abraços &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-7086398073462052676?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/7086398073462052676/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/01/formatando-valores-no-datagrid.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/7086398073462052676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/7086398073462052676'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/01/formatando-valores-no-datagrid.html' title='Formatando valores no dataGrid'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7090724980506392645.post-7784646142652547892</id><published>2010-01-29T22:26:00.011-02:00</published><updated>2010-02-01T21:29:33.928-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Descrição'/><category scheme='http://www.blogger.com/atom/ns#' term='abrir'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='tree'/><title type='text'>Abrir/fechar a Tree clicando na descrição do nó</title><content type='html'>Blz galera?! lá vai minha primeira e simples contribuição para a galera que anda quebrando a cabeça e divertindo-se com Flex. Coloque uma Tree e faça o teste, tenta abrir os nós clicando na descrição, não vai conseguir, eu particularmente acho isso muito ruim, a usabilidade fica horrível fazendo que o usuário seja ninja para clicar certinho no "triângulo" que tem ao lado da descrição do nó.&lt;br /&gt;&lt;br /&gt;Agora chega de enrolar e vamos lá . . .&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;i&gt;&lt;b&gt;1º no fonte mxml:&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;pre class="actionscript" name="code"&gt;itemClick="itemClickTree(event)"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;b&gt;&lt;i&gt;2º no as faça o seguinte método&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;private function itemClickTree(Evento: Event): void {&lt;br /&gt;&amp;nbsp; var&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; item: Object = new Object();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; item = Tree(Evento.currentTarget).selectedItem;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if (tree.dataDescriptor.isBranch(item))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tree.expandItem(item, !tree.isItemOpen(item), true);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Agora sempre que o usuário clicar na descrição da Tree o nó irá abrir/fechar. &lt;br /&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="210" width="250"&gt; &lt;param name="movie" value="http://edu.armstrong.sites.uol.com.br/Swf/Tree.swf" /&gt;&lt;param name="quality" value="high" /&gt;&lt;embed src="http://edu.armstrong.sites.uol.com.br/Swf/Tree.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="250" height="210"&gt; &lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Abraços!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7090724980506392645-7784646142652547892?l=eduarmstrong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eduarmstrong.blogspot.com/feeds/7784646142652547892/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://eduarmstrong.blogspot.com/2010/01/abrirfechar-tree-clicando-na-descricao.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/7784646142652547892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7090724980506392645/posts/default/7784646142652547892'/><link rel='alternate' type='text/html' href='http://eduarmstrong.blogspot.com/2010/01/abrirfechar-tree-clicando-na-descricao.html' title='Abrir/fechar a Tree clicando na descrição do nó'/><author><name>Eduardo Armstrong Correnti</name><uri>http://www.blogger.com/profile/00452909277335677591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_PKKw4nSHEns/S2RTZmg-DQI/AAAAAAAAAAM/ev_hONODDRE/S220/Edu_Armstrong.bmp'/></author><thr:total>0</thr:total></entry></feed>
