Jump to content


Photo

Textarea Com Multiplos Textos


  • Faça o login para participar
1 reply to this topic

#1 batisteli

batisteli

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado
  • Localidade:Lisboa

Posted 13/05/2009, 18:45

Boa noite a todos! Li o post do Pedro e fiquei contente com a proposta. Não sou programador mas me aventuro em algumas linhas. Utilizo o Flash CS3 e valho-me muito do help do proprio programa e de algum conhecimento que adiquiri desde o flash4. Penso que a dúvida abaixo já será um contribuição para a melhoria proposta.

Precisava de carregar multiplos textos e estava a pensar em utilizar uma única instancia do componente TextArea, ou do campo texto dinamico e através de botões carregar os tais textos assim:
Botão 1 » carrega o texto 1
Botão 2 » carrega o texto 2
Botão 3 » carrega o texto 3 e assim por diante.
Já fiz varias tentativas sem sucesso. Precisava de um passo-a-passo.

Obrigado!
Ps. Quem der a melhor e mais rapida dica ganha um guia turistico exclusivo quando quiser visitar Lisboa que é onde eu vivo. Ah, sim! com direito a bacalhau e vinho

#2 Pedropauloalmeida

Pedropauloalmeida

    Fale ao motorista somente o indispensável

  • Usuários
  • 1376 posts
  • Sexo:Masculino
  • Localidade:Santo André SP

Posted 19/05/2009, 14:27

Olá, Batisteli.

Se o post que você leu (já que não sou o único "Pedro" por aqui, eu acho), fico contente que tenha gostado de algum hehe.
Para você carregar vários textos em único textField basta você obter esse texto, buscando ele de uma página de servidor ou arquivo local, etc.

Mas já assumindo que você tem esse texto, ficaria algo assim:


Em AS 2.0:
// Assumindo que você já tem os 3 textos que você deseja, armazenados nas variáveis a seguir:
var texto1:String = "Esse é o texto 1";
var texto2:String = "Esse é o texto 2";
var texto3:String = "Esse é o texto 3";

// Assumindo que no Stage você tem um textField dinâmico com o nome "info_txt", faço o evento de click nos botões, apontando o texto:

this.botao1_btn.onRelease = function():void {
	 // colocando o texto 1 no click do botão 1.
	 this.info_txt.text = texto1;
}


/*
E você repetiria o processo para os outros 3 botões. Mas e se fossem 400 botões? Ou se você não soubesse 
quantos botões teria, talvez montando esses botões dinamicamente. Seria impossível ou muito trabalhoso fazer um novo flash para isso.
É aí que entram os loopings e arrays.
Vamos dizer que eu vou ter um array com 400 botões ou 30 ou 50. Ou seja: "n" botões. E uma outra que contém os textos. Assumindo aqui que
um botão tem respectivamente seu texto, certo? Então: 30 botões, 30 textos:  */

var listaDeBotoes:Array = new Array(botao0, botao1, botao2, botao3, botao4); // e assim por diante
var listaDeTextos:Array = new Array(texto0, texto1, texto2, texto3, texto4); // e assim por diante

// Fazendo com que o click em cada botão aponte para uma mesma função, que vai identificar o botão clicado para saber qual texto será exibido:

var tt:Number = listaDeBotoes.length; // total de botões
while (tt--) {
	 // identificando o botão:
	 var bt:Button = listaDeBotoes[tt];
	 bt.onRelease = function() {
			showTexto(this);
	 }
}

function showTexto(bt:Button):void {
	 /* Como eu não sei qual a posição do botão botão clicado na lista de botões, eu vou ter que fazer uma função para busca-lo.
	 Se fosse um movieClip eu poderia usar do
	artifício de que ele extends Object e Object é Dynamic. Mas vamos fazer o "certo" para que fique uma explicação bem completa: */
	var idx:Number = posicaoDoBotao(bt);
	if (idx == null) {
		 trace("Erro! O botão clicado não foi encontrado na lista de botões");
	} else {
		 info_txt.text = listaDeTextos[idx].toString();
	}
}

// Buscando a posição do botão na lista de botões:
function posicaoDoBotao(bt:Button):Number {
	 var tt:Number = listaDeBotoes.length;
	 while (tt--) if (listaDeBotoes[tt] == bt) return tt;
	 /* se eu cometi algum erro, retornar null. Aí saberei que esqueci de adicionar o botão na minha lista de botões. Seria um erro interessante,
	 pois se ele não estava na lista, como recebeu o listener para clique? Mas nunca é demais fazer um tratamento de erro :-) */
	 return null;
}



No caso do ActionScript 3.0, algumas coisinhas mudam. Mas também não é nenhum bixo de sete cabeças. Olha só:

var listaDeBotoes:Array = new Array(botao0, botao1, botao2, botao3, botao4); // e assim por diante
var listaDeTextos:Array = new Array(texto0, texto1, texto2, texto3, texto4); // e assim por diante


// Fazendo com que o click em cada botão aponte para uma mesma função, que vai identificar o botão clicado para saber qual texto será exibido:
var tt:Number = listaDeBotoes.length; // total de botões
while (tt--) {
	 // identificando o botão:
	 var bt:SimpleButton = SimpleButton(listaDeBotoes[tt]);
	 bt.addEventListener(MouseEvent.CLICK, showTexto);
}

function showTexto(evt:MouseEvent):void {
	 /* Em AS3 eu já tenho um método no array que é o 'indexOf'. Ele já me poupa de fazer manualmente a busca pelo meu objeto dentro da lista */
	var idx:int = listaDeBotoes.indexOf(evt.target);
	if (idx == -1) {
		 trace("Erro! O botão clicado não foi encontrado na lista de botões");
	} else {
		 info_txt.text = listaDeTextos[idx].toString();
	}
}


Existem maneiras bem mais "rápidas" ou de economizar muitas linhas no código acima. Mas eu prefiro, aqui no fórum principalmente, escrever da forma mais clara possível. Eu não testei nenhum desses códigos acima. Escrevi direto aqui no "Resposta rápida" do fórum. Qualquer dificuldade ou erro com eles, basta postar.


Abraços e desculpe a demora na postagem.

pp




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq