Michel, no meu caso, os usuários tem um volume muito grande de dados para digitar e para eles é muito mais fácil utilizar o teclado do que o mouse. Estamos usando o Flex para substituir a interface de um sistema que temos em Kylix e nossa preocupação é mais muito mais com a usabilidade do usuário do que criar uma RIA propriamente dita. Para você ter uma idéia, nós desenvolvedores relutamos em desenvolver um requisto que era o pressionamento da tecla Enter para troca de campo. Fizemos isso até o dia que nosso gerente veio e disse que no setor de contabilidade da empresa o usuário segura uma nota fiscal com a mão esquerda e digita no teclado numérico com a mão direita. Imagina esse usuário tendo que girar seu tronco a cada dado digitado para pressionar TAB para trocar de campo. Para muitos (inclusive para a mim) isso, a princípio parece um absurdo, mas tem gente que passa o dia executando tarefas repetitivas como esta e forçar o usuário o usar o mouse ou qualquer outra coisa que não seja confortável para ele é como dár-lhe chicotadas o dia inteiro. Voltando ao assunto inicial do tópico, agora que já expliquei que tenho motivos para ter um campo desse tipo, você poderia testá-lo e dar sua opinião e talvez até sua contribuição com o componente né?... hheheh ...
Abraços e obrigado por responder... On 2 set, 19:58, Michel Fernandes <miche...@gmail.com> wrote: > Sem querer ser espírito de porco, mas o DateChooser já não dá conta do > recado? Eu falo isso pq vc não está a entrar dados de hora e minuto... > > 2009/9/2 thiagoalgo <thiagoa...@gmail.com> > > > > > Opa Felipe, a sua idéia é legal. Mas nesse campo aí o usuário não > > precisa digitar as barras e o campo está sempre aparecendo formatado > > para ele. Quanto a usar um DateValidator eu não tinha pensado ainda, > > mas deve economizar algumas linhas de código realmente. > > > On 2 set, 16:36, Felipe Bianconi <felipebianc...@gmail.com> wrote: > > > Uma dica, aqui nós formatamos o texto digitado, ao entrar no DateField, > > > retiramos as barras(/) e deixamos só os números, e ao sair, formatamos > > ele > > > com o DateFormatter e validamos com o DateValidator, setando o maxChars > > do > > > _textInput do DateField para 8 quando entra e 10 ao sair. Isso economiza > > o > > > trabalho do usuário digitar as barras. Mas que eu dei uma olhada rápida > > no > > > código, parece ser muito funcional. > > > > Obrigado, > > > Felipe Bianconi > > > > 2009/9/2 thiagoalgo <thiagoa...@gmail.com> > > > > > 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) { > > ... > > mais » --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---