DClick

Arquivos da categoria "Flex"

Typesafe Enum em Action Script 3

Categorias relacionadas: ActionScript, Flex, Programação
Twitter!

O screencast abaixo é bem simples, porém muito eficiente para proteger o seu código. É importante ressaltar que isso tudo é necessário, pois o Action Script 3 não possui construtor privado e muito menos a implementação nativa de Enum.

Por Rafael Martinelli em 18/February/2010
13 Comentários »


No Translations

Oportunidade para Trabalhar com RIA no RJ

Categorias relacionadas: Flex, Notícias
Twitter!

A DClick RJ está contratando programadores RIA para trabalhar no RJ.

Se você conhece bem Adobe Flex suas chances são grandes. Senão, veja se você encaixa na filosofia abaixo.

Nota: Os dois últimos projetos do vídeo foram desenvolvidos pela em parceria com a Roundarch dos EUA.

Os interessados devem enviar um email para: oportunidade@dclick.com.br. Quem sabe no próximo DClick Team Teaser o seu nome não faça parte da lista que aparece no final do clipe.

Por Beck Novaes em 12/February/2010
6 Comentários »


No Translations

Como pegar o BitmapData e o ByteArray de um Embed no Flex?

Categorias relacionadas: Flex
Twitter!

Quando você quer manipular imagens e outros tipos de arquivos no Flex, geralmente você precisa do BitmapData ou o ByteArray desse arquivo. A maioria das pessoas já sabe como fazer isso usando o Loader, mas é um pouco mais difícil encontrar informações sobre como fazer isso com arquivos "Embedados". Por isso, vou mostrar aqui como fazer!

Se você quer embedar uma imagem (JPEG, GIF ou PNG) no Flex, você precisa embedar em uma variável do tipo Class. O que a maioria das pessoas não sabe é que o tipo dessa classe será BitmapAsset e que BitmapAsset é uma subclasse da classe Bitmap. Então, você pode fazer isso:

Actionscript:
  1. [Embed(source="image.png")]
  2. public var MyEmbed:Class;
  3.  
  4. private function getBitmapData():BitmapData
  5. {
  6.     var bitmapAsset:BitmapAsset = new MyEmbed();
  7.     return bitmapAsset.bitmapData;
  8. }


Agora, para pegar o ByteArray, você precisa de uma pequena alteração. Você deve adicionar o parâmetro mimeType="application/octet-stream" para a metadata Embed. Com esse parâmetro, a variável Class será do tipo ByteArrayAsset, que é uma subclasse do ByteArray. Então, você poderá fazer isso:

Actionscript:
  1. [Embed(source="image.png",mimeType="application/octet-stream")]
  2. public var MyEmbed:Class;
  3.  
  4. private function getByteArray():ByteArrayAsset
  5. {
  6.     var byteArrayAsset:ByteArrayAsset = new MyEmbed();
  7.     return byteArrayAsset;
  8. }


Dessa maneira, você pode até usar o Embed em algum arquivo TXT ou XML para sua aplicação e lê-lo facilmente! O ByteArray pode ser convertido para String dessa maneira:

Actionscript:
  1. [Embed(source="myTextFile.txt",mimeType="application/octet-stream")]
  2. public var MyEmbed:Class;
  3.  
  4. private function readEmbeddedTxt():String
  5. {
  6.     var byteArrayAsset:ByteArrayAsset = new MyEmbed();
  7.     return byteArrayAsset.toString();
  8. }


Fácil, hein?

Por André Gil em 28/January/2010
1 Comentário »


No Translations

Flex For Kids

Categorias relacionadas: Adobe, Flex, RIA
Twitter!

A DClick está patrocinando o Flex for Kids. Este é um evento muito especial para todos que trabalham não apenas com RIA, mas com desenvolvimento de Software em geral. Eu não preciso escrever muito neste post. Basta você clicar aqui e ver (sentir) o vídeo de menos de três minutos.

Por Beck Novaes em 26/January/2010
Nenhum Comentário »


No Translations

Passando parâmetros para Event Handlers – Parte 2

Categorias relacionadas: ActionScript, Flex, Otimização, Programação
Twitter!

Ano passasdo perguntei ao Beck como passar parâmetros para Event Handlers adicionados dinamicamente, porque quando você adiciona Event Listener usando myComp.addEventListener(...), o handler deve esperar apenas o parâmetro do evento. O Beck deu uma solução para isso, mas deixou claro que é apenas uma solução "alternativa", não a melhor delas.

Alguns dias atrás eu estava trabalhando com requisições simultâneas para o servidor e queria guardar o parâmetro da chamada, mas não queria ter que retornar ele do Java, então pensei em uma outra solução para isso. Considerando que seu Event Handler está esperando uma Function que tem somente um parâmetro Event, eu criei uma outra Function que retorna uma Function esperando um parâmetro Event. Mas o segredo é que o escopo de Function Closure permite que você acesse parâmetros tanto da primeira quanto da segunda Function, então você pode fazer isso:

XML:
  1. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" height="100%" width="100%"
  2.     initialize="initApp()">
  3.  
  4.     <mx:Script>
  5.         <![CDATA[
  6.             private function initApp():void
  7.             {
  8.                 buttonA.addEventListener(MouseEvent.CLICK, buttonHandler(0x0000FF));
  9.                 buttonB.addEventListener(MouseEvent.CLICK, buttonHandler(0xFF0000));
  10.             }
  11.  
  12.             private function buttonHandler(color:uint):Function
  13.             {
  14.                 return function(event:MouseEvent):void
  15.                 {
  16.                     box.setStyle("backgroundColor", color);
  17.                 }
  18.             }
  19.         ]]>
  20.     </mx:Script>
  21.  
  22.     <mx:HBox>
  23.         <mx:Button id="buttonA" label="Blue"/>
  24.         <mx:Button id="buttonB" label="Red"/>
  25.     </mx:HBox>
  26.  
  27.     <mx:Box id="box" height="80" width="200" backgroundColor="#FFFFFF"/>
  28.  
  29. </mx:Application>


Mas e agora se você quiser usar esse Event Handler diretamente no MXML? Bem, você não pode fazer isso:

XML:
  1. <mx:Button label="Green" click="buttonHandler(0x00FF00)"/>


Isso não vai funcionar porque a Function que retorna da primeira Function está esperando um parâmetro Event. Então, você pode fazer assim:

XML:
  1. <mx:Button label="Green" click="buttonHandler(0x00FF00)(event)"/>


Estranho, não? Talvez mais um patter do FreaktionScript?

Por André Gil em 19/January/2010
7 Comentários »


No Translations

Tamanho de Container com Base nos Filhos

Twitter!

Quando criamos um Container no Flex e não especificamos seu tamanho, o tamanho será calculado com base nos filhos que são adicionados ao Container. Porém, caso você especifique um tamanho para ele, o tamanho passa a ser o que você especificou e, caso ele seja menor do que o tamanho dos filhos, o componente exibirá uma ScrollBar.

Mas e se você quiser que ele volta a calcular o tamanho para você? Existem alguns casos em que precisamos que isso seja feito, porém não podemos atribuir "null" ou -1 como valor na propriedade para que o Container volte ao comportamento inicial.

Conversando com o Beck Novaes a muito tempo atrás, ele me apontou uma solução para isso. Se vocês olharem no código de alguns componentes do Flex (como o Container ou o UIComponent), vocês encontrarão várias referências para a função isNaN() e, como muitos de vocês devem saber, NaN é o valor atribuído a variáveis numéricas quando não estão com algum valor numérico atribuído.


Portanto, para que o componente calcule o tamanho para você, faça o seguinte:

Actionscript:
  1. myContainer.height = NaN;


Um exemplo completo:

XML:
  1. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" height="100%" width="100%">
  2.  
  3.     <mx:Script>
  4.         <![CDATA[
  5.             private function sizeChanged():void
  6.             {
  7.                 if (group.selection == rbFixed)
  8.                 {
  9.                     myVBox.height = 100;
  10.                 }
  11.                 else
  12.                 {
  13.                     myVBox.height = NaN;
  14.                 }
  15.             }
  16.         ]]>
  17.     </mx:Script>
  18.  
  19.     <mx:HBox>
  20.         <mx:RadioButtonGroup id="group"
  21.             change="sizeChanged()"/>
  22.         <mx:RadioButton id="rbFixed" label="Fixed Size" selected="true"
  23.             group="{group}"/>
  24.         <mx:RadioButton id="rbAuto" label="Auto Size"
  25.             group="{group}"/>
  26.     </mx:HBox>
  27.  
  28.     <mx:VBox id="myVBox" height="100" width="150" backgroundColor="#FFFFFF" horizontalAlign="center">
  29.         <mx:Button label="Botão 1"/>
  30.         <mx:Button label="Botão 2"/>
  31.         <mx:Button label="Botão 3"/>
  32.         <mx:Button label="Botão 4"/>
  33.         <mx:Button label="Botão 5"/>
  34.     </mx:VBox>
  35.  
  36. </mx:Application>


Estranho, não? Seria esse mais um pattern do FreaktionScript?

Por André Gil em 11/January/2010
Nenhum Comentário »


No Translations

Flex serial is invalid (MacOs)

Categorias relacionadas: AIR, ActionScript, Adobe, Eclipse, Flash Builder, Flex
Twitter!

Flex_Serial_Invalid

Não é a primeira vez que entro com meu serial do Flex Builder e recebo a mensagem dizendo que meu serial é inválido. Dessa vez fiz uma procura e achei o que causa tal mensagem de erro.

Por algum motivo quando executamos o eclipse, ele não sobe com a permissão de admin na máquina, o que o impossibilita de criar o aquivo license.properties que é responsável por armazenar seu serial.

Para resolver o problema, bastei executá-lo via Terminal com o comando sudo.

sudo /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse

Com tal comando, o eclipse foi executado com permissão de admin, o que possibilitou o serial ser salvo sem problema algum.

Flex_Serial_Valid

Não sei se o mesmo acontece no windows, mas caso sim, basta executar o eclipse com permissão de admin que isso se resolverá.

Por Bruno Sales em 16/December/2009
Nenhum Comentário »


No Translations