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 -~----------~----~----~----~------~----~------~--~---