DClick

Arquivos da categoria "ActionScript"

Rotacionando Janelas no Flex: PodFlip Component

Categorias relacionadas: ActionScript, Flex Components
Twitter!

A ultima turma do Imersão Adobe Flex recebeu alguns “presentinhos”. Dentre eles o componente PodFlip, utilizado numa das aplicações que desenvolvemos aqui na DClick e que o pessoal já andou vendo por aí.

É verdade que o Flex 4 e com as novas capacidades 3D do Flash Player isso será bem mais fácil no futuro. Mas enquanto este dia não chega agora é a hora de compartilhar este componente com o restante de comunidade. Espero que seja util em algum projeto para vocês.

Clique aqui para fazer o download do código fonte deste screencast.

Por Beck Novaes em 22/February/2010
3 Comentários »


No Translations

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
14 Comentários »


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

Formulários dinâmicos com validadores

Twitter!

Em minha estréia, trago para você este script para agilizar a construção de formulários Flex, ele apenas aponta "o caminho", você deverá implementar com os demais validadores.
Leia o artigo completo »

Por Pedro Silva em 30/September/2009
Nenhum Comentário »


No Translations

Operador Lógico ||= em AS3

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

Bom, poucas pessoas sabem para que serve o operador lógico "||=". Vou tentar explicar um pouco sobre ele.

Na documentação da adobe este operador é descrito da seguinte forma: "Assigns expression1 the value of expression1 || expression2.", traduzindo seria: "Atribui para expressão1 o valor de expressão1 ou da expressão2". Lembrando que para o operador lógico usamos com sintaxe "expressão1 operador expressão2".

Vou mostrar em exemplos mais claros como isso funciona.
Leia o artigo completo »

Por Bruno Sales em 28/August/2009
5 Comentários »


Other Languages: