Gracias, eres un mounstruo. Le daré un par de vueltas a ver que hago al
final.
Por otra parte y respecto a "Lo del Delegate debe funcionar" pues
efectivamente estoy de acuerdo contigo pero en este mundo del flash nada es
lo que parece y la realidad supera a la ficción. El import del Delegate sí
que lo tengo hecho, lo que pasa es que tampoco se como pasarle parámetros.
Es decir, si tengo:
miboton.onPress = Delegate.create(this,trazar)
¿cómo hago para pasarle parámetros a la función trazar?
Con:
miboton.onPress = Delegate.create(this,trazar(1))
Llama a la función directamente sin presionar el botón siquiera
Con:
miboton.onPress = Delegate.create(this,trazar,1)
Llama al pulsar pero el 1 no se lo pasa a la función.
Más que nada ya por curiosidad y porque fijo que me puede hacer falta en
algún caso...
Un saludo.
From: Miguel Angel Sánchez <[EMAIL PROTECTED]>
Reply-To: asnativos@5dms.com
To: asnativos@5dms.com
Subject: Re: [ASNativos] onPress y llamadas a funciones
Date: Mon, 13 Feb 2006 12:46:31 +0100
Lo del Delegate debe funcionar, tan solo hay que hacer el import
correspondiente: mx.utils.Delegate, pero como decía antes creo que es
bastante mejor usar el EventDispatcher, te va a resultar mucho más flexible
y dejas tu clase como una caja negra que la única información que recibe
del exterior son los parámetros de configuración. Para lo que tú quieres
sería algo así:
<code>
import mx.events.EventDispatcher;
import mx.utils.Delegate;
class Ventana {
//variables que requiere EventDispatcher
public var addEventListener:Function;
public var removeEventListener:Function;
private var dispatchEvent:Function;
public function Ventana(...):Void {
EventDispatcher.initialize(this); //Inicializa las funciones
declaradas arriba
...
botonAceptar.onPress = Delegate.create(this, aceptarPressed);
}
private function aceptarPressed():Void {
//disparamos el evento
//target es una referencia al objeto que lanza el evento (this)
//type es el nombre del evento
//podemos enviar otros tantos parámetros como queramos, o ninguno
dispatchEvent({target:this, type:"onAceptar", param1:valor1,
param2:valor2 ... paramN:valorN);
}
...
}
</code>
Luego puedes definir oyentes para los eventos en otras clases
<code>
var v:Ventana = new Ventana(1, "AVISO DE ERROR");
v.addEventListener("onAceptar", Delegate.create(this, accionesAceptar));
v.addEventListener("onCancelar", Delegate.create(this, accionesCancelar));
function accionesAceptar(eventObject:Object):Void {
//eventObject es el objeto que contiene las propiedades target, type,
param1, param2... definidas al disparar el evento con dispatchEvent
trace("Evento " + eventObject.type + " capturado");
trace("El valor de param1 es " + eventObject.param1);
}
</code>
Y esto es todo, espero que te sirva de ayuda, un saludo
Felipe Fernandez Sanchez escribió:
Muchas gracias, lo del Delegate ya lo había probado también y que si
quieres arroz Catalina. Si se te ocurre alguna cosa más....De todas
formas, lo que trato de hacer es una clase para una ventana de mensajes,
al que se le puede decir en el constructor el tipo de ventana (aviso,
error, info), el numero de botones a mostrar y las FUNCIONES (y aquí viene
el problema que me ocupa) asociadas a cada uno de ellos. De forma que si
yo quiero mostrar desde otra clase una ventana de aviso haga:
new Ventana(1,"AVISO DE ERROR",["aceptar""],[onAceptar])
Esto hace que aparezca una ventana de error con un botón Aceptar y que
cuando se pulse dicho botón se ejecute la función onAceptar de la clase
llamante. Pero mi problema ahora es cómo llamar a esas funciones con
parámetros (pasados en otro Array al constructor).
Ahora que tienes toda la información sigues pensando que es conveniente lo
del EventDispatcher?
En ese caso harías el favor de explicarlo un poco más.
Gracias, por cierto.
From: Miguel Angel Sánchez <[EMAIL PROTECTED]>
Reply-To: asnativos@5dms.com
To: asnativos@5dms.com
Subject: Re: [ASNativos] onPress y llamadas a funciones
Date: Mon, 13 Feb 2006 11:13:38 +0100
La solución del EventDispatcher la veo más correcta y flexible, te
permite añadir/eliminar oyentes a los eventos, en lugar de pasárselos
todos por parámetro en el constructor, pero si quieres seguir por donde
ibas, haz un 'wrapper' para el onPress y luego llamas a la función con
los parámetros que quieras
miboton.onPress = Delegate.create(this, callFunction);
private function callFunction():Void {
funciones[0](parametro1, parametro2, ...);
}
Felipe Fernandez Sanchez escribió:
Si, pero alguna solución más sencilla no existe? Porque no me creo que
no se pueda hacer lo que estoy intentando....
From: Miguel Angel Sánchez <[EMAIL PROTECTED]>
Reply-To: asnativos@5dms.com
To: asnativos@5dms.com
Subject: Re: [ASNativos] onPress y llamadas a funciones
Date: Mon, 13 Feb 2006 10:18:14 +0100
Felipe Fernandez Sanchez escribió:
Hola, agradecería que me echarais una mano con lo siguiente:
Tengo un símbolo Botón e intento asociarle una función al evento
onPress. Después de comprobar que el addEventListener para este objeto
no funciona, lo hice con:
El addEventListener no funciona para el botón, pero puedes encapsular
el botón dentro de una clase que haga uso de EventDispatcher y dispare
un evento cuando salte el onPress, luego registras oyentes para ese
evento y ya lo tienes, sin líos de arrays de funciones, parámetros y
ámbitos (existe esta palabra en español, Ale, xD )
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------