sábado, 7 de novembro de 2009

IsaDateField - Componente de DateField customizado em Flex já formatado para o padrão Português-Brasileiro

Abaixo segue o código de um componente extendido do DateField que formata o campo já no padrão Português-Brasileiro.

A diferença desse código é que nele o usuário pode digitar a data desejada no campo e o componente formata a data digitada no formato Brasileiro.

<?xml version="1.0" encoding="utf-8"?>

<mx:DateField xmlns:mx="http://www.adobe.com/2006/mxml" editable="true"
formatString="DD/MM/YYYY"
labelFunction="formatIsaDateField" dayNames="['D','S','T','Q','Q','S','S']"
parseFunction="parseIsaDateField" monthNames="['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro']">


<mx:Script>

<![CDATA[

         public function formatIsaDateField(currentDate:Date):String {
            var textoResult:String=DateField.dateToString(currentDate, this.formatString);
            return textoResult;
         }



         public function parseIsaDateField(valueString:String, inputFormat:String):Date {
            var stringDataFormatada:String=IsaDateField.format(valueString, inputFormat);
            var dateResult:Date=DateField.stringToDate(stringDataFormatada, "DD/MM/YYYY");
            return dateResult;
         }



         public static function format(value:String, inputFormat:String):String {
            if (value == null) {
               return "";
            }
            var stringDataOriginal:String=value as String;
            stringDataOriginal=stringDataOriginal.replace(/(\/)/g, "");
            var dia:String="";
            var mes:String="";
            var ano:String="";
            var dataFormatada:String="";          
          
            if (inputFormat == 'MM/YYYY') {
               stringDataOriginal = "01" + stringDataOriginal;            
            }
          
           if (stringDataOriginal.length >= 1) {
              dia=stringDataOriginal.substring(0, 2);
           }
           if (stringDataOriginal.length >= 3) {
              mes=stringDataOriginal.substring(2, 4);
           }
           if (stringDataOriginal.length >= 5) {
              ano=(stringDataOriginal.length == 6) ? stringDataOriginal.substring(4, 6) : stringDataOriginal.substring(4,
                 8);
           }
           if (dia.length == 2) {
              dataFormatada+=dia + "/";
           } else {
              return value as String;
           }
           if (mes.length == 2) {
              dataFormatada+=mes + "/";
           } else {
              return dataFormatada + mes;
           }
          if (ano.length == 2) {
             var tempNumber:Number=new Number(ano);
             if (tempNumber >= 20) {
                ano="19" + ano;
             } else {
                ano="20" + ano;
             }
          }
          return dataFormatada + ano;          
         }
      
]]>
  

</mx:Script>

</mx:DateField>


Exemplo do componente funcionando:




Ou clique aqui para ver a aplicação com código-fonte;

Ou aqui pra ver código-fonte diretamente;

Cortesia Inside System - Negócios em Tecnologia
http://www.insidesystem.com.br

.

Componente botão em flex que tem o evento "enter"

componente botão em flex que tem o evento "enter"

(na verdade esse é um componente que extende o botão padrão do flex e adiciona o evento "enter", ou seja, ao teclar o enter, o botão será acionado):


package com.inside.hctissflex.util.component
{
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import mx.controls.Button;
import mx.events.FlexEvent;

[Event(name="enter", type="mx.events.FlexEvent")]

public class IsaButton extends Button
{
public function IsaButton()
{
//TODO: implement function
super();
}
/**
* @private
*/
override protected function keyDownHandler(event:KeyboardEvent):void
{
switch (event.keyCode)
{
case Keyboard.ENTER:
{
dispatchEvent(new FlexEvent(FlexEvent.ENTER));
break;
}
}
}
}
}



cortesia Inside System - Negócios em Tecnologia