Mascarando campos TextInput e TextField no Flash
por Rafael Dourado - 09/04/2007Quem trabalha com Flash vez por outra pode sentir a necessidade de criar um campo com máscara para telefone, CNPJ, CEP etc. Recentemente precisei de um e, obviamente, perguntei ao oráculo. Ele me levou a um artigo do Fernando Incerti no iMasters, onde o autor havia criado uma classe para esse fim e a disponibilizara.
Porém, o código era falho, pois se baseava no momento do pressionar de tecla, o que não era útil caso o usuário copiasse e colasse o número. Enviei um e-mail ao Fernando informando esse detalhe, mas não recebi resposta. Logo, resolvi usar sua classe como base e corrigi essa falha. Agora disponibilizo para vocês.
Intruções
Abra o Flash, crie um arquivo novo chamado Mascara.as e cole o código abaixo:
class Mascara {
public function setMascara(campo:Object, formato:String) {
campo.restrict = "0-9";
campo.maxChars = formato.length;
var char:Array = new Array();
for (var i:Number = 0; i<formato.length; i++) {
if (formato.charAt(i) != 0) {
char.push({intervalo:i, caractere:formato.charAt(i)});
}
}
//
function checaMascara() {
var n:Number = 0;
var final:String = "";
var cleanStr:String = "";
//
for (var i:Number = 0; i<campo.text.length; i++) {
if (!isNaN(campo.text.substr(i, 1))) {
cleanStr += campo.text.substr(i, 1);
}
}
//
for (var i:Number = 0; i<cleanStr.length; i++) {
while (i+n == char[n].intervalo) {
final += char[n].caractere;
n++;
}
final += cleanStr.substr(i, 1);
}
campo.text = final;
Selection.setSelection(campo.text.length, campo.text.length);
}
//
if (typeof (campo) == "movieclip") {
var mListener:Object = new Object();
campo.addEventListener("change", mListener);
mListener.change = function() {
checaMascara();
};
} else if (typeof (campo) == "object") {
campo.onChanged = function() {
checaMascara();
};
}
}
}
Para usar essa classe, basta copiar o arquivo para a mesma pasta do seu .fla ou para a pasta de classes da sua instalação do Flash. Crie uma instância da classe Mascara assim:
var minhaMascara:Mascara = new Mascara();
E utilize o método setMascara enviando dois parâmetros. O primeiro é o nome de instância do campo que você deseja mascarar e o segundo é o formato da máscara.
minhaMascara.setMascara(campo1, "00/00/0000");
Não expliquei o código por pura preguiça, mas se quiser tirar alguma dúvida, fique à vontade de fazê-lo nos comentários.

09/04/2007 • 3:48
Nunca imaginei que eu iria colocar alguma coisa desse blog na tag actionscript do meu delicious… huahuahauhaua.
Muito bom o codigo.
09/04/2007 • 8:18
Nunca ouviu a frase “mantenha seus amigos próximos e os inimigos mais próximos ainda”? hehehe
21/08/2007 • 14:19
cara
ñ consegui fazer essa mascara ae…me explica melhor isso!
vlw
21/08/2007 • 15:10
Rodrigo, inclui no artigo um link para os arquivos originais.
Dessa forma você poderá ver como funciona. O .fla está em Flash 8, ok?
Se não conseguir é só comentar novamente.
20/09/2007 • 19:07
Pois é. Eu tentei aqui, mas não consegui devido ao fato de meu formulário ter sido criado todo dentro de um movie clipe. Como é que resolve essa parada nessa situação?
20/09/2007 • 21:53
Juscelino, o processo é idêntico. Só que em vez de colocar só o nome do campo, coloca o caminho completo para chegar nele como
nomeMovieClip.campo30/10/2007 • 10:21
muito bom este tutorial, e esta class sem comentários, vou deixa na minha biblioteca, para sempre usa-la!!
Um abraço
Henrique Eloi
www.inov9.com
27/02/2008 • 15:56
Cara, muito boa essa classe, porém há um erro nela.
Se você coloca dois caracteres que não são números ele não coloca o segundo.
Mudar
if (i+n == char[n].intervalo) {
Por
while(i+n == char[n]intervalo) {
Fique mais de hora em cima pra achar esse bug =)
27/02/2008 • 16:54
Valeu, Rion! Já fiz a alteração no artigo e no arquivo. Obrigado.