Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ronaldo Roma

Como criar botões com eventos dinâmicos

Recommended Posts

Olá,

 

Estou criando uma classe de botões onde gostaria de carregar seus eventos dinamicamente, carregando-os de arquivos XMLs ou texto, porém não sei como atribuí-los em tempo de execução.

 

poderiam me ajudar?

 

segue classe

 

package DeMarte.Componentes.Objs.Graficos
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	
	 /**
	 * ...
	 * @author Ronaldo Roma
	 */
	public class  Botao	extends Sprite{
		// PROPERTIES
		private var _typeButton:uint;
		private var _widthButton:uint;
		private var _heigthButton:uint;
		private var _colorButton:uint;
		private var _radiusButton:Number;
		private var _borderButton:Number;
		private var _borderColorButton:uint;
		private var _transparenceButton:Number;
		private var _supEsquerdo:Number;
		private var _infEsquerdo:Number;
		private var _supDireito:Number;
		private var _infDireito:Number;
		private var _texto:String;
		
		// GETTERS
		public function get getTypeButton():uint { return _typeButton; }
		public function get getBorderButton():Number { return _borderButton; }
		public function get getWidthButton():Number { return _widthButton; }
		public function get getHeigthButton():Number { return _heigthButton;}
		public function get getColorButton():int { return _colorButton; }
		public function get getRadiusButton():Number { return _radiusButton; }
		public function get getBorderColorButton():int { return _borderColorButton; }
		public function get getTransparenceButton():int { return _transparenceButton; }
		public function get getSupEsquerdo():Number { return _supEsquerdo }
		public function get getInfEsquerdo():Number { return _infEsquerdo }
		public function get getSupDireito():Number { return _supDireito }
		public function get getInfDireito():Number { return _infDireito }
		public function get getTexto():String { return _texto }

		//SETTERS
		public function set setTypeButton(TypeButton:uint):void { _typeButton = TypeButton; }
		public function set setBorderButton(BorderButton:Number):void { _borderButton = BorderButton; }
		public function set setWidthButton(WidthButton:Number):void { _widthButton = WidthButton; }
		public function set setHeigthButton(HeigthButton:Number):void { _heigthButton = HeigthButton; }
		public function set setColorButton(ColorButton:int):void { _colorButton = ColorButton; }
		public function set setRadiusButton(radiusButton:Number):void  { _radiusButton = radiusButton; }
		public function set setBorderColorButton(BorderColorButton:int):void  { _borderColorButton = BorderColorButton; }
		public function set setTransparenceButton(transparenceButton:int):void { _transparenceButton=transparenceButton; }
		public function set setSupEsquerdo(supEsquerdo:Number):void  { _supEsquerdo = supEsquerdo }
		public function set setInfEsquerdo(infEsquerdo:Number):void  { _infEsquerdo = infEsquerdo }
		public function set setSupDireito(supDireito:Number):void  { _supDireito = supDireito }
		public function set setInfDireito(infDireito:Number):void  { _infDireito = infDireito }
		public function set setTexto(texto:String):void  { _texto = texto; }
		
		//CONSTRUCTOR
		public function Botao(  typeButton:uint           = 0,
								widthButton:Number        = 80,
								heigthButton:Number       = 20,
								radiusButton:Number       = 20,
								colorButton:int           = 0x00ffff,
								borderButton:Number       = 1,
								borderColorButton:int     = 0xff0000,
								transparenceButton:Number = 5,
								supEsquerdo:Number        = 8,
								infEsquerdo:Number        = 8,
								supDireito:Number         = 8,
								infDireito:Number         = 8,
								texto:String              = ""
							  ) {
			_typeButton         = typeButton         ;
			_borderButton       = borderButton       ;
			_widthButton        = widthButton        ;
			_heigthButton       = heigthButton       ;
			_colorButton        = colorButton        ;
			_radiusButton       = radiusButton       ;
			_borderColorButton  = borderColorButton  ;
			_transparenceButton = transparenceButton ;
			_supEsquerdo        = supEsquerdo        ;
			_infEsquerdo        = infEsquerdo        ;
			_supDireito         = supDireito         ;
			_infDireito         = infDireito         ;
			_texto              = texto              ;
			_init();
		}
		
		//INICIALIZAADOR
		private function _init() {
			switch(_typeButton) {
				case 1:
					_btnQuadrado();
					trace("1");
					break;
				case 2:
					trace("2");
					_btnRedondo()
					break;
				case 3:
					trace("3");
					_btnQuadArredondado();
					break;
				default:
					trace("0");
					_btnQuadArredondado()
					break;
			}
			if (_texto.length > 0 ) {
				var t:TextField = _criaTexto();
				t.addEventListener(MouseEvent.CLICK, _onMouseClick);
				t.addEventListener(MouseEvent.MOUSE_DOWN, _onMouseDown);
				t.addEventListener(MouseEvent.MOUSE_OUT, _onMouseOut);
				t.addEventListener(MouseEvent.MOUSE_OVER, _onMouseOver);
				t.addEventListener(MouseEvent.MOUSE_UP, _onMouseUp);
				
				/*addChild(t);
				t.x = _widthButton / 2 - t.textWidth / 2*/
				t.selectable = false;
				t.mouseEnabled = false
			}
		}
		// BOTAO REDONDO
		private function _btnRedondo():void {
			graphics.beginFill(_colorButton, _transparenceButton);
			graphics.drawCircle(0, 0, _radiusButton);
			graphics.endFill();
		}
		// BOTAO QUADRADO
		private function _btnQuadrado():void {
			//_colorButton
			graphics.beginFill(_colorButton, _transparenceButton);
			graphics.drawRect(0, 0, _widthButton, _heigthButton);
			graphics.endFill();
		}
		// BOTAO QUADRADO
		private function _btnQuadArredondado():void {
			graphics.beginFill(_colorButton, _transparenceButton);
			graphics.drawRoundRectComplex(0, 0,_widthButton,_heigthButton,_supEsquerdo,_supDireito,_infEsquerdo,_infDireito);
			graphics.endFill();
		}
		// CRIA O TEXTO
		private function _criaTexto():TextField{
			var txt:TextField = new TextField();
			txt.text = _texto;
			return txt;
		}
		
		private function _onMouseClick(e:MouseEvent):void {
			trace("MouseClick");
		}
		private function _onMouseDown(e:MouseEvent):void {
			trace("MouseDown");
		}
		private function _onMouseOut(e:MouseEvent):void {
			trace("MouseOut");
		}
		private function _onMouseOver(e:MouseEvent):void {
			trace("MouseOver");
		}
		private function _onMouseUp(e:MouseEvent):void {
			trace("MouseUp");
		}
	}
	
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi muito bem, como assim você quer carregar os eventos dinamicamente?

 

poste um exemplo desses eventos, ou como ficaria isso

 

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite, Eder!

 

Mais ou mesnos assim:

 

criar uma classe que eu possa criar botões para diferentes tipos de aplicações, com diferentes utilizades.

colocar em um XML por exemplo:

 

<evento>

<funcao>"_abrirURL"</funcao>

<conteudo>"comandos para abrir URL"</conteudo>

</evento>

<evento>

<funcao>"_play"</funcao>

<conteudo>"comandos para executar um MovieClip"</conteudo>

</evento>

<evento>

<funcao>"_limparTextField"</funcao>

<conteudo>"comandos para limpar um text Field"</conteudo>

</evento>

 

e durante a execução da aplicação carregar os eventos de acordo com o XML, por exemplo, uma pagina web que eu crie um botão utilizando a classe, chamando a "funcao" _abrirURL com os comandos da tag "conteudo", um outro botão chamando a "funcao" _play e por ai vai.

 

Não sei se é possível, talvez eu esteja querendo algo que ainda não é possivel ou que não seja viável.

 

O caso é que tentei criar uma classe(anexada no corpo do 1º post, porém sem os addEventListener), para utilizar em diferentes tipos de aplicações(web ou desktop), e adicionar os eventos em tempo de execução.

 

Se não é possivel/viavel, gostaria que me ajudasse explicando boas praticas e/ou algumas formas de fazer de forma que a classe deixe de ser genérica.

 

Grato.

 

[]´s.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha, você quer deixar isso genérico até de mais, acho que não tem como fazer algo assim, colocar o conteúdo da função num XMl

e fazer o flash executar aquilo

 

o ideal é você já planejar o que pode ser que aconteça, e o que o seu swf pode fazer, e deixar o mais parametrizavel possivel

 

e no XML você coloca os essa nome da ação, e os paramentos, ao ser carregado pelo flash, você teria que usar um IF(acao=='isso'){fazAlgo()}

 

acho que é a melhor solução

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

<evento>

<funcao>"_abrirURL"</funcao>

<conteudo>"http://google.com"</conteudo>

<alvo>btn</alvo>

</evento>

 

<evento>

<funcao>"_play"</funcao>

<conteudo>"comandos para executar um MovieClip"</conteudo>

<alvo>btn</alvo>

<alvo2>mc1</alvo2>

</evento>

 

<evento>

<funcao>"_limparTextField"</funcao>

<conteudo>"comandos para limpar um text Field"</conteudo>

<alvo>btn</alvo>

<txt>txt1</txt>

</evento>

 

var funcao:string = xml.evento;

 

switch (funcao)

{

case "_abrirURL":

var btn:Botao = this.getChildbyName(xml.evento.alvo);

btn.url = xml.evento.url;

btn.addEventListener(MouseEvent.CLICK, openUrl);

break;

 

case "_play":

var btn:Botao = this.getChildbyName(xml.evento.alvo);

btn.alvo2 = xml.evento.alvo2;

btn.addEventListener(MouseEvent.CLICK, playMe);

break;

 

 

case "_limparTextField":

var btn:Botao = this.getChildbyName(xml.evento.alvo);

btn.alvo2 = xml.evento.alvo2;

btn.addEventListener(MouseEvent.CLICK, limpaTxt);

break;

 

}

 

 

 

function openUrl:void(e:Event)

{

navigateUrl(new URLRequest(e.currentTarget.url, "_blank"));

}

 

 

function playMe(e:Event):void

{

var mc:MovieClip = this.getChildByName(e.currentTarget.alvo2);

mc.play();

}

 

function limpaTxt(e:Event):void

{

var txt:TextField = this.getChildByName(e.currentTarget.alvo2);

txt.text = "";

}

 

 

 

enjoy ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.