Foros del Web » Creando para Internet » Flash y Actionscript »

evento

Estas en el tema de evento en el foro de Flash y Actionscript en Foros del Web. hola a todos, tengo un problema con manejar eventos de teclado... hasta ahora siempre habia manejado los eventos como tipo Event pero ahora necesito saber ...
  #1 (permalink)  
Antiguo 30/07/2009, 10:54
 
Fecha de Ingreso: octubre-2008
Mensajes: 58
Antigüedad: 16 años, 1 mes
Puntos: 0
evento

hola a todos, tengo un problema con manejar eventos de teclado... hasta ahora siempre habia manejado los eventos como tipo Event pero ahora necesito saber la tecla presionada y necesito usar KeyboardEvent....

bueno, lo que pasa es que siempre ocupe una variable "event" cuando usaba eventos tipo Event por ej. focusOut="validar(event)" .... siendo que validar() estaba definida como validar(evt:Event)

ahora quiero usar change="verificar(evento)" que segun la definicion de la funcion "evento" debiera se un KeyboardEvent... verificar(evt:KeyboardEvent)

Al principio le puse "event" en vez de "evento" como parametro pero me decia que "event" era de tipo Event y se podrucia un conflicto ya que no era un KeyboardEvent como se esperaba. Luego, cuando le cambie de nombre a "evento", decia que la variable "evento" no existia... despues de esto, declare una variable "evento" de tipo KeyboardEvent quedando inicializada en null por defecto. Ahora, cuando la uso asi, el evento verificar() me esta pasando un null como argumento y la funcionalidad de verificar() se me cae...

Ojala me haya explicado bien... en realidad nunca entendi bien de donde venia la variable event de tipo Event, parece que es una variable estatica que se carga por defecto... existe algo parecido para capturar un tipo KeyboardEvent?

jedo
  #2 (permalink)  
Antiguo 30/07/2009, 12:58
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 11 meses
Puntos: 43
Respuesta: evento

Hola Jedo !

Creo que estás algo confundido acerca de como funcionan los eventos en Flex.

Puedes crear clases, componentes, módulos, etc..., que tengan la capacidad de lanzar eventos, estos se pueden propagar a lo largo de la aplicación para poder ser capturados y tomar alguna acción en específico.

La clase Event se podría decir que es la mamá de todos los eventos, si quieres definir un evento propio tienes que heredar forzosamente de la clase Event, y lo que estamos lanzando realmente son instancias de esas clases.

Te pongo un pequeño ejemplo, podriamos definir un nuevo evento llamado MiEvento:

Código actionscript:
Ver original
  1. package
  2. {
  3.     import flash.events.Event;
  4.  
  5.     public class MiEvento extends Event
  6.     {
  7.        
  8.         public static var PROCESO_INICIADO:String = "proceso_iniciado";
  9.         private var valor:int;
  10.        
  11.         public function MiEvento(type:String, valor:int, bubbles:Boolean=false, cancelable:Boolean=false)
  12.         {
  13.             this.valor = valor;
  14.             super(type, bubbles, cancelable);
  15.         }
  16.        
  17.         public function getValor():int
  18.         {
  19.             return valor;  
  20.         }
  21.     }
  22. }

En nuestros eventos podemos definir nuevos atributos como valor, y también atributos estáticos para los tipos de evento.

Ahora la clase que lanzará el evento:

Código actionscript:
Ver original
  1. package
  2. {
  3.     import flash.events.EventDispatcher;
  4.  
  5.     public class MiClase extends EventDispatcher
  6.     {
  7.         public function MiClase()
  8.         {
  9.         }
  10.        
  11.         public function iniciar():void
  12.         {
  13.             dispatchEvent(new MiEvento(MiEvento.PROCESO_INICIADO, 10));
  14.         }
  15.     }
  16. }

Para que nuestra clase pueda lanzar eventos tiene que heredar de la clase EventDispatcher, cuando creemos una instancia de MiClase y llamemos a su método iniciar, se llamará al método heredado dispatchEvent y a este le entregamos una instancia de nuestro evento pasándole como parámetros el tipo y en este caso el valor del atributo que definimos en la clase.

Muchas de las clases definidas dentro de Flex como MovieClip ya heredan de la clase EventDispatcher.

Supongamos también si tenemos una clase que ya hereda de otra clase, ya no tendriamos la posibilidad de heredar de la clase EventDispatcher porque as3.0 no soporta la herencia multiple ( Gracias a dios! ), así que en este caso se tendría que hacer uso de las interfaces, implementar la interfaz IEventDispatcher en la clase y implementar cada uno de los métodos definidos en ella.

Más al respecto:
http://livedocs.adobe.com/flex/2/lan...ispatcher.html

Ahora, como hariamos uso de MiClase:

Código actionscript:
Ver original
  1. var miClase:MiClase = new MiClase();
  2. miClase.addEventListener(MiEvento.PROCESO_INICIADO, alIniciar);
  3. miClase.iniciar();
  4.  
  5. function alIniciar(evento:MiEvento):void
  6. {
  7.     trace(evento.getValor());
  8. }


Espero que con esto te quede claro el uso de los eventos, no dudes en preguntar si algo no te ha quedado claro.

Un saludo !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
  #3 (permalink)  
Antiguo 30/07/2009, 16:07
 
Fecha de Ingreso: octubre-2008
Mensajes: 58
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: evento

hola jahepi, gracias por tu respuesta.

Sigo un poco confundido... por ejemplo lo que quiero hacer en particular es usar la propiedad charCode de la clase KeyboardEvent para saber el codigo de la tecla capturada. Como dicha propiedad no es general, no la implementa Event sino que es propia de KeyboardEvent... ahora no entiendo por que hay que implementar una clase propia hija si la clase KeyboardEvent y la propiedad ya existe... pero si debo hacerlo, el problema vuelve ser como obtener la informacion de un evento de teclado... dicha informacion tendria que pasarla por parametro al constructor de mi nueva clase... un objeto de KeyboardEvent contendria esa informacion pero como inicializarlo?
en estos momentos estoy inicializando un objeto de Event (mediante la variable (estatica segun el compilador) event), pero como es padre no tiene la propiedad charCode del hijo...
Para este caso en particular, como la harias tu?
saludos y gracias

jedo
  #4 (permalink)  
Antiguo 30/07/2009, 16:37
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 11 meses
Puntos: 43
Respuesta: evento

Cita:
Iniciado por jedo Ver Mensaje
hola jahepi, gracias por tu respuesta.

Sigo un poco confundido... por ejemplo lo que quiero hacer en particular es usar la propiedad charCode de la clase KeyboardEvent para saber el codigo de la tecla capturada. Como dicha propiedad no es general, no la implementa Event sino que es propia de KeyboardEvent... ahora no entiendo por que hay que implementar una clase propia hija si la clase KeyboardEvent y la propiedad ya existe... pero si debo hacerlo, el problema vuelve ser como obtener la informacion de un evento de teclado... dicha informacion tendria que pasarla por parametro al constructor de mi nueva clase... un objeto de KeyboardEvent contendria esa informacion pero como inicializarlo?
en estos momentos estoy inicializando un objeto de Event (mediante la variable (estatica segun el compilador) event), pero como es padre no tiene la propiedad charCode del hijo...
Para este caso en particular, como la harias tu?
saludos y gracias

jedo
Pero porqué del tipo Event y no del tipo KeyBoardEvent ?

Mira, visita el siguiente enlace:
Handling keyboard events in Flex

Un saludote !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
  #5 (permalink)  
Antiguo 03/08/2009, 12:37
 
Fecha de Ingreso: octubre-2008
Mensajes: 58
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: evento

gracias jahepi, al final era algo bien simple... el tipo de la variable event que uno pone como parametro cuando se llama a la funcion, depende del evento que uno esta llamando... al menos eso saque por conclusion...

usando focusOut o change, event es un objeto de la clase Event
usando keyUp, event es un objeto de la clase KeyboardEvent

no habia usado keyUp antes... es lo que necesitaba
saludos

jedo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:06.