ActionScript/Tipos de campos de texto

Origem: Wikilivros, livros abertos por um mundo aberto.
Ir para: navegação, pesquisa

Podemos criar um campo de texto através do ActionScript e ele pode ser de duas características diferentes: ou uma caixa de input (para formulários) ou de texto dinâmico (que pode ser alterado). O tipo StaticText, texto estático do Flash, só pode ser criada na IDE do Flash.

As bibliotecas usadas são flash.text.TextField, para a criação dos textos em si, e flash.text.TextFieldType, para configuração do tipo de caixa de texto.

var placar:TextField = new TextField();
placar.type = TextFieldType.DYNAMIC;
 
var login:TextField = new TextField();
login.type = TextFieldType.INPUT;
 
placar.x = placar.y = 100;
login.x = login.y = 200;
 
placar.text = "Texto Dinâmico";
login.text = "Caixa de input";
 
addChild(placar);
addChild(login);

O campo placar será do tipo dinâmico, o que permite a mudança de seu texto, e login é um campo de input, o que faz com que ele possa ser editado e submetido.

Índice

[editar] Estilizando campo de texto

Podemos definir a altura e largura de um campo de texto, se terá borda e sua cor, cor de fundo, entre outros.

var cxTexto:TextField = new TextField();
cxTexto.type = TextFieldType.DYNAMIC;
 
// Largura e altura
cxTexto.width = 200;
cxTexto.height = 20;
 
cxTexto.border = true; // Terá borda
cxTexto.borderColor = 0x0000FF; // Cor da borda
cxTexto.background = true; // Terá cor de fundo
cxTexto.backgroundColor = 0xDDDDDD; // Cor
 
cxTexto.multiline = true; // Permite ter mais de uma linha
cxTexto.wordWrap = true; // Esconderá texto de linha que passar da largura da caixa
cxTexto.selectable = false; // Texto não será selecionável
 
cxTexto.textColor = 0x990000; // Cor do texto
 
cxTexto.text = "Texto de exemplo"; // O texto da caixa
 
addChild(cxTexto);

[editar] Campo de senha

Precisa ser do tipo input e ser configurado true para o atributo displayAsPassword. Você pode configurar também o número máximo de caracteres e uma expressão regular para restringir os tipos de caracteres aceitos (se somente letras, números, etc.).

var cxSenha:TextField = new TextField();
cxSenha.type = TextFieldType.INPUT;
 
// Será campo de senha
cxSenha.displayAsPassword = true;
 
cxSenha.restrict = "a-z0-9"; // Só aceita letras e números
cxSenha.maxChars = 15; // Aceita apenas 15 caracteres
 
// Alguns atributos suportados
cxSenha.width = 120;
cxSenha.height = 18;
cxSenha.border = true;
cxSenha.borderColor = 0x0000FF;
cxSenha.background = true;
cxSenha.backgroundColor = 0xDDDDDD;
addChild(cxSenha);

Veja mais sobre expressões regulares em ActionScript na página de ajuda da Adobe.

[editar] Foco a um campo de texto

Use a propriedade focus para lançar o foco sobre um campo de texto. O exemplo abaixo faz com que quando o palco for clicado a caixa de senha cxSenha receba o foco do cursor de texto.

var cxSenha:TextField = new TextField();
cxSenha.type = TextFieldType.INPUT;
 
cxSenha.displayAsPassword = true;
cxSenha.width = 120;
cxSenha.height = 18;
cxSenha.x = cxSenha.y = 10;
 
cxSenha.restrict = "a-z0-9";
cxSenha.maxChars = 15;
 
addChild(cxSenha);
 
stage.addEventListener(MouseEvent.CLICK, foco);
 
function foco(evt:MouseEvent):void 
{
    stage.focus = cxSenha; // Usando a propriedade focus
}

Você pode usar esse comando stage.focus porque a referência a linha principal de tempo está implícita. Você poderia escrever esse comando de duas maneiras diferentes que surtem o mesmo efeito:

cxSenha.stage.focus = cxSenha; // fazendo referência ao palco da cxSenha, ou
this.stage.focus = cxSenha; // usando a palavra 'this'

[editar] Acrescentando texto

Utilize o método appendText():

var cxTexto:TextField = new TextField();
 
cxTexto.text = "Meu nome é ";
cxTexto.appendText("João");

O resultado será "Meu nome é João". Você pode adicionar texto através do operador += também (cxTexto.text += "João"), mas appendText() é mais rápido.

[editar] Dimensionando um campo de texto

A propriedade autoSize, da classe TextField, redimensiona um campo de texto baseado em entrada e na escolha do alinhamento.

var cxSenha:TextField = new TextField();
cxSenha.type = TextFieldType.DYNAMIC;
 
// Estilização...
cxSenha.width = 120;
cxSenha.height = 18;
cxSenha.x = cxSenha.y = 50;
cxSenha.border = true;
cxSenha.borderColor = 0x0000FF;
cxSenha.background = true;
cxSenha.backgroundColor = 0xDDDDDD;
 
// essas 3 linhas são necessárias, pois senão o resultado será uma única linha de texto
cxSenha.multiline = true;
cxSenha.selectable = false;
cxSenha.wordWrap = true;
 
cxSenha.text = "Meu nome é Fulano, sou estudante\n de ActionScript 3.0 e web designer. Moro em São Paulo capital.";
 
// Dimensionando automaticamente a caixa de texto
cxSenha.autoSize = TextFieldAutoSize.LEFT;
 
addChild(cxSenha);
cxSenha.addEventListener(MouseEvent.CLICK, adiciona);
 
function adiciona(evt:MouseEvent):void 
{
    evt.target.appendText("TEXTO ");
}

Você pode utilizar as propriedades TextFieldAutoSize.LEFT (expande ou contrai no lado direito, em qualquer caso de linhas novas), TextFieldAutoSize.RIGHT (expande ou contrai no lado esquerdo) e TextFieldAutoSize.CENTER (distribui igualmente tanto à direita como à esquerda os espaços).

No exemplo acima, cada vez que a caixa for clicado novo texto será adicionado, o que faz com que a caixa, em vez de esconder o texto novo, se redimensione e abrigue mais texto.

  • O caractere especial \n significa uma nova linha de texto (carriage return).

[editar] Rolagem de um campo de texto

Para efetuar a rolagem num campo de texto você deve utilizar as propriedades scrollV (rolagem vertical) e scrollH (horizontal). Veja o exemplo:

var cxTexto:TextField = new TextField();
cxTexto.type = TextFieldType.DYNAMIC;
 
cxTexto.width = 120;
cxTexto.height = 42;
cxTexto.x = cxTexto.y = 50;
cxTexto.border = true;
cxTexto.borderColor = 0x0000FF;
cxTexto.background = true;
cxTexto.backgroundColor = 0xDDDDDD;
cxTexto.multiline = true;
cxTexto.selectable = false;
cxTexto.wordWrap = true;
 
cxTexto.text = "Meu nome é Fulano, sou estudante\n de ActionScript 3.0 e web designer. Moro em São Paulo capital. \
Desejo trabalhar com web, internet, redes e etc." ;
 
addChild(cxTexto);
 
cxTexto.addEventListener(MouseEvent.CLICK, rolagem);
 
function rolagem(evt:MouseEvent):void 
{
    // Rolará para baixo aumentando em uma linha o andamento da rolagem
    evt.target.scrollV++;
}

Ao clicar em cxTexto você verá o texto rolando, uma linha por vez (por causa de ++, mas você pode pedir que ande determinado número de linhas usando o atributo += ). Você pode fazer a rolagem ir para cima diminuindo com scrollV--, ou então inserir diretamente um número inteiro para rolar a caixa.

  • A barra invertida (\) inserida na string em cxTexto.text serve para darmos continuidade na escrita de um comando muito longo na linha seguinte. Assim não temos dificuldades para ler e escrever códigos muito longos.
  • A roda do mouse também permite a rolagem da caixa de texto.

[editar] Usando fontes embutidas

Utilize a propriedade embedFonts para dar suporte a uma fonte embutida (só possível através da IDE do Flash).

cxTexto.embedFonts = true;

[editar] Usando TextFormat

Criando uma instância da classe TextFormat você pode formatar campos de txto, configurando cores para o texto, tipologia, tamanho, entre outras. Não permite todos os recursos que a formatação através de HTML/CSS (visto adiante), porém TextFormat é um pouco mais fácil de se utilizar.

var formatacao:TextFormat = new TextFormat(); // Criando o objeto
 
formatacao.font = "Arial"; // Definindo fonte
formatacao.color = 0x000099; // Definindo cor de texto
 
// Texto será em negrito, itálico e sublinhado
formatacao.bold = true;
formatacao.italic = true;
formatacao.underline = true;
 
// Tamanho 14, espaçamento entre letras (estes em pixels) e espaço entre linhas
formatacao.size = 14;
formatacao.letterSpacing = 1;
formatacao.leading = 6;
 
// Margem esquerda e direita
formatacao.leftMargin = 3;
formatacao.rightMargin = 2;
 
// Indentação do texto
formatacao.indent = 8;
 
// Criando e definindo campo de texto...
var cxTexto:TextField = new TextField();
cxTexto.width = 200;
cxTexto.height = 300;
cxTexto.border = true;
 
// Passando à cxTexto a instância que contém informações sobre formatação
cxTexto.defaultTextFormat = formatacao;
cxTexto.text = "Texto de exemplo feito \npara a exibição de texto formatado.";
 
addChild(cxTexto);

O uso da propriedade defaultTextFormat funciona bem porque definimos o texto da caixa cxTexto depois de discriminarmos a formatação. Para inserirmos a formatação depois de definir o texto temos que usar o método setTextFormat(). Você pode especificar também um limite de caracteres (seleção) que será formatada (em vez do texto todo):

cxTexto.setTextFormat(formatacao);
 
// Apenas os caracteres de 0 a 4. O valor 4 é o caractere até onde vai a formatação, e 0 o início
cxTexto.setTextFormat(formatacao, 0, 4);

[editar] Usando HTML e CSS

[editar] Hiperlinks

[editar] Disparando ActionScript de links HTML

[editar] Selecionando texto

Ferramentas pessoais
Espaços nominais

Variantes
Acções
Navegação
Projecto
Imprimir/exportar
Ferramentas