Mascarando campos TextInput e TextField no Flash

por Rafael Dourado - 09/04/2007

Quem 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.

[ Download dos Arquivos ]

9 comentários para “Mascarando campos TextInput e TextField no Flash”

  1. Caetano Neto Says:

    Nunca imaginei que eu iria colocar alguma coisa desse blog na tag actionscript do meu delicious… huahuahauhaua.

    Muito bom o codigo.

  2. Rafael Dourado Says:

    Nunca ouviu a frase “mantenha seus amigos próximos e os inimigos mais próximos ainda”? hehehe

  3. Rodrigo Says:

    cara

    ñ consegui fazer essa mascara ae…me explica melhor isso!

    vlw

  4. Rafael Dourado Says:

    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.

  5. Juscelino Says:

    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?

  6. Rafael Dourado Says:

    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.campo

  7. Henrique Eloi Says:

    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

  8. Rion Says:

    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 =)

  9. Rafael Dourado Says:

    Valeu, Rion! Já fiz a alteração no artigo e no arquivo. Obrigado. :D

Deixe uma resposta