Pessoal,

Primeiramente desculpem a pretenção no título do email, mas incluí a
palavra enviando pois se não a maioria das pessoas iria achar que
estou solicitando um componente de máscara.

Fiz um componente de data que está funcionando muito bem, porém está
bem "engessado" aceitando apenas o formato dd/mm/yyyy. Por isso estou
disponibilizando para uso e se alguma alma caridosa se inspirar e
quiser melhorá-lo e talvez até dinamizar o formato da máscara o código
está aí.

Uma coisa que acho que ficou nesse componente é que você pode
trabalhar diretamente com dados do tipo Date e não com a propriedade
text do componente.

Segue abaixo o código, se alguém quiser o arquivo posso enviar também.
Lembro que foi feito a "marretada" então tem coisas que com certeza
podem ser melhoradas.

package {
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.ui.Keyboard;

        import mx.controls.TextInput;
        import mx.formatters.DateFormatter;

        public class ERKDateInput extends TextInput {

                private var _text:String = "";
                private var _textFormated:String = "";

                [Inspectable(defaultValue="false", enumeration="true,false",
category="ERK")]
                private var _keepInitial:Boolean = false; // Verifica se o valor
inicial deve ser setado quando chamado o metodo reset

                private var _initialValue:Date = null; // Armazena o primeiro 
valor
setado no componente para setar novamente quando o metodo reset for
invocado e quando _keepInitial for verdadeiro

                [Inspectable(defaultValue="false", enumeration="true,false",
category="ERK")]
                private var _controlavel:Boolean = true;

                public function ERKDateInput() {
                        super();
                }

                override protected function childrenCreated():void {
                        super.childrenCreated();
                        this.width = 80;
                        this.addEventListener(KeyboardEvent.KEY_DOWN, 
_onKeyDown);
                        this.formatar();
                }

                private function _onKeyDown(event:KeyboardEvent):void {
                        var ini:int = selectionBeginIndex; // inicio da selecao
                        var fim:int = selectionEndIndex; // fim da selecao

                        if (event.keyCode == Keyboard.BACKSPACE) {
                                var limiteAuxIni:int = 0;
                                var inicioAuxFim:int = 0;

                                if (fim - ini > 0) {
                                        if (ini >= 6) {
                                                limiteAuxIni = ini - 2;
                                        } else if (ini >= 3) {
                                                limiteAuxIni = ini - 1;
                                        } else {
                                                limiteAuxIni = ini - 0;
                                        }

                                        if (fim >= 6) {
                                                inicioAuxFim = fim - 2;
                                        } else if (fim >= 3) {
                                                inicioAuxFim = fim - 1;
                                        } else {
                                                inicioAuxFim = fim - 0;
                                        }

                                } else {
                                        if (ini >= 6) {
                                                limiteAuxIni = ini - 1 - 2;
                                        } else if (ini >= 3) {
                                                limiteAuxIni = ini - 1 - 1;
                                        } else {
                                                limiteAuxIni = ini - 1 - 0;
                                        }

                                        if (fim >= 6) {
                                                inicioAuxFim = fim - 2;
                                        } else if (fim >= 3) {
                                                inicioAuxFim = fim - 1;
                                        } else {
                                                inicioAuxFim = fim - 0;
                                        }
                                }


                                var auxIni:String = this._text.substring(0, 
limiteAuxIni);
                                var auxFim:String = 
this._text.substring(inicioAuxFim,
this._text.length);

                                this._text = auxIni.concat(auxFim);

                                // Definindo a posicao do cursor
                                if (ini == 6) {
                                        this.selectionBeginIndex = 4;
                                        this.selectionEndIndex = 4;

                                } else if (ini == 3) {
                                        this.selectionBeginIndex = 1;
                                        this.selectionEndIndex = 1;

                                }

                        } else if (event.keyCode == Keyboard.DELETE) {
                                var limiteAuxIni:int = 0;
                                var inicioAuxFim:int = 0;

                                if (fim - ini > 0) {
                                        if (ini >= 6) {
                                                limiteAuxIni = ini - 2;
                                        } else if (ini >= 3) {
                                                limiteAuxIni = ini - 1;
                                        } else {
                                                limiteAuxIni = ini - 0;
                                        }

                                        if (fim >= 6) {
                                                inicioAuxFim = fim - 2;
                                        } else if (fim >= 3) {
                                                inicioAuxFim = fim - 1;
                                        } else {
                                                inicioAuxFim = fim - 0;
                                        }

                                } else {
                                        if (ini >= 6) {
                                                limiteAuxIni = ini - 2;
                                        } else if (ini >= 3) {
                                                limiteAuxIni = ini - 1;
                                        } else {
                                                limiteAuxIni = ini - 0;
                                        }

                                        if (fim >= 6) {
                                                inicioAuxFim = fim + 1 - 2;
                                        } else if (fim >= 3) {
                                                inicioAuxFim = fim + 1 - 1;
                                        } else {
                                                inicioAuxFim = fim + 1 - 0;
                                        }
                                }

                                var auxIni:String = this._text.substring(0, 
limiteAuxIni);
                                var auxFim:String = 
this._text.substring(inicioAuxFim,
this._text.length);
                                this._text = auxIni.concat(auxFim);

                        } else if (event.keyCode >= Keyboard.NUMPAD_0 && 
event.keyCode <=
Keyboard.NUMPAD_9) {
                                var digitado:String = null;
                                if (ini >= 6) {
                                        ini -= 2;
                                } else if (ini >= 3) {
                                        ini--;
                                }

                                if (fim >= 6) {
                                        fim -= 2;
                                } else if (fim >= 3) {
                                        fim--;
                                }

                                if (event.keyCode == Keyboard.NUMPAD_0) { 
digitado = "0"; }
                                else if (event.keyCode == Keyboard.NUMPAD_1) { 
digitado = "1"; }
                                else if (event.keyCode == Keyboard.NUMPAD_2) { 
digitado = "2"; }
                                else if (event.keyCode == Keyboard.NUMPAD_3) { 
digitado = "3"; }
                                else if (event.keyCode == Keyboard.NUMPAD_4) { 
digitado = "4"; }
                                else if (event.keyCode == Keyboard.NUMPAD_5) { 
digitado = "5"; }
                                else if (event.keyCode == Keyboard.NUMPAD_6) { 
digitado = "6"; }
                                else if (event.keyCode == Keyboard.NUMPAD_7) { 
digitado = "7"; }
                                else if (event.keyCode == Keyboard.NUMPAD_8) { 
digitado = "8"; }
                                else if (event.keyCode == Keyboard.NUMPAD_9) { 
digitado = "9"; }

                                // Verificando se tem selecao e alterando o 
valor selecionado ou
                                // se nao ha selecao e eh apenas para adicionar 
o valor digitado.
                                if (fim - ini > 0) {
                                        if (digitado != null) {
                                                var auxIni:String = 
this._text.substring(0, ini);
                                                var auxFim:String = 
this._text.substring(fim,
this._text.length);
                                                auxIni = 
auxIni.concat(digitado);
                                                this._text = 
auxIni.concat(auxFim);
                                        } else if (event.keyCode == 
Keyboard.BACKSPACE || event.keyCode
== Keyboard.DELETE) {
                                                var auxIni:String = 
this._text.substring(0, ini);
                                                var auxFim:String = 
this._text.substring(fim,
this._text.length);
                                                this._text = 
auxIni.concat(auxFim);
                                        }
                                } else {
                                        // So sera adicionado o caracter 
digitado se nao houver valor
apos o cursor
                                        // ou se o texto apos ainda poder ser 
deloscado
                                        if (this._text.charAt(ini) == null || 
this._text.charAt(ini) ==
"" || this._text.length + 1 <= 8) {
                                                if (digitado != null) {
                                                        var auxIni:String = 
this._text.substring(0, ini);
                                                        var auxFim:String = 
this._text.substring(fim,
this._text.length);
                                                        auxIni = 
auxIni.concat(digitado);
                                                        this._text = 
auxIni.concat(auxFim);
                                                }
                                        }
                                }

                                // Definindo a posicao do cursor
                                if (ini == 3) {
                                        this.selectionBeginIndex = 6;
                                        this.selectionEndIndex = 6;

                                } else if (ini == 1) {
                                        this.selectionBeginIndex = 3;
                                        this.selectionEndIndex = 3;

                                }

                        }

                        this._text = this._text.substr(0, 8);
                        this.formatar();

                }

                private function formatar():void {
                        var aux:String = "";
                        var posInText:int = 0;
                        for (var i:int = 0; i < 10; i++) {
                                if (i == 2 || i == 5) {
                                        aux = aux.concat("/");
                                        posInText--;
                                } else {
                                        if (this._text.length >= (posInText + 
1)) {
                                                aux = 
aux.concat(this._text.charAt(posInText));
                                        } else {
                                                aux = aux.concat("_");
                                        }
                                }
                                posInText++;
                        }

                        this._textFormated = aux;
                        this.invalidateDisplayList();
                }

                override protected function 
updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void {
                        super.updateDisplayList(unscaledWidth, unscaledHeight);
                        this.text = this._textFormated;
                        this.dispatchEvent(new Event("dateChange"));
                }

                public function set date(value:Date):void {
                        if (this._keepInitial && this._initialValue == null) {
                                this._initialValue = value;
                        }

                        var dateFormatter:DateFormatter = new DateFormatter();
                        dateFormatter.formatString = "DDMMYYYY";

                        this._text = dateFormatter.format(value);
                        this.formatar();

                }

                [Bindable("dateChange")]
                public function get date():Date {
                        trace(">>>>>>> DateChange");
                        trace(this._text);
                        if (this._text.length == 8) {
                                var dia:int = int(this._text.substr(0, 2));
                                var mes:int = int(this._text.substr(2, 2)) - 1; 
// Mes inicia em 0
(zero)
                                var ano:int = int(this._text.substr(4, 4));
                                var date:Date = new Date(ano, mes, dia);
                                trace("Retornou: " + date);
                                return date;
                        } else {
                                trace("Retornou: " + null);
                                return null;
                        }
                }

                public function reset():void {
                        if (this._keepInitial) {
                                this.date = this._initialValue;
                        } else {
                                this.date = null;
                        }
                }

                public function set controlavel(value:Boolean):void {
                        this._controlavel = value;
                }

                public function get controlavel():Boolean {
                        return this._controlavel;
                }

                public function set keepInitial(value:Boolean):void {
                        this._keepInitial = value;
                }

                public function get keepInitial():Boolean {
                        return this._keepInitial;
                }
        }
}
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para 
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a