Delegados En C#
Enviado por betito1995 • 15 de Junio de 2015 • 1.812 Palabras (8 Páginas) • 261 Visitas
Introducción
En la programación de los diferentes tipos de lenguajes, existen diversos tipos de eventos las cuales cada uno de ellos tienen un fin diferente de acuerdo a su función y en la manera de cómo se propagan.
PROPAGACIÓN DE EVENTOS
Los eventos del teclado y del ratón están vinculados con la ventana visible más pequeña que contiene el puntero en ese instante. Hay tres casos en el mecanismo de propagación:
• Si se ha seleccionado el evento en esa ventana, se notifica al cliente.
• Si no está seleccionado pero está incluido en do_not_propagate_mask, el evento no se notifica.
• Si no está incluido en ninguna de las máscaras el evento se propaga a la ventana padre y se repite el proceso hasta que se llegue a la ventana raíz.
El mecanismo de propagación descrito tiene dos excepciones:
• El enfoque (focus) del teclado
• Posesión (grab) del teclado y puntero
Propagación de eventos significa que, cuando se emite un evento en un widget particular, puede pasarse a su widget padre (y ese widget puede pasárselo a su padre, y así sucesivamente) y, si el padre tiene un manejador de eventos, se llamará.
Al contrario que otros eventos, los eventos del teclado primero se envían a la ventana de nivel superior (Gtk:Windows), donde se verifican los atajos del teclado establecidos (teclas aceleradoras y combinaciones, utilizadas para seleccionar elementos del menú desde el teclado). Después de esto (y asumiendo que no se manejó el evento), se envía al widget que tiene el foco, y la propagación comienza desde allí. El evento se propagará hasta que alcance el widget de mayor nivel, o hasta que detenga la propagación devolviendo true desde un manejador de eventos.
Tenga en cuenta que, después de haber cancelado un evento, no se llamará a ninguna otra función (incluso si es del mismo widget).
El enfoque del teclado
En cada momento hay una ventana que tiene el enfoque del teclado. Los eventos del teclado estarán asociados sólo a la ventana con el enfoque y sus descendientes. Dos casos:
• Si el puntero está fuera de estas ventanas, el evento se asocia a la ventana con enfoque.
• Si el puntero está dentro, se lleva a cabo el mecanismo de propagación habitual.
Por defecto el enfoque está en la ventana raíz y se cambia con la primitiva XSetInputFocus. Normalmente, lo hace el gestor de ventanas.
Posesión del teclado y puntero
Un cliente puede establecer un grab sobre el teclado o ratón para asegurarse de que todos los eventos que produzca el dispositivo se le notifiquen sólo a él. Hay dos tipos:
• grab activo. Tiene lugar inmediatamente y se mantiene hasta que el cliente lo desactiva.
• grab pasivo. El programa especifica que la posesión tendrá lugar cuando se pulse una determinada tecla o botón del ratón y se mantendrá hasta que se repita la acción.
Ademas del ratón y el teclado, un cliente puede tomar posesión del servidor evitando no sólo la propagación de eventos a otros clientes sino también el procesamiento de sus peticiones.
Algunos eventos
Cada evento lleva asociado una estructura XEvent que proporciona información detallada sobre el evento. Algunos eventos:
KeyPress, KeyRelease
Tecla pulsada y liberada. La estructura del evento contiene un código de tecla dependiente del servidor. La aplicación debe usar XLookupString para obtener el valor ASCII.
ButtonPress, ButtonRelease
Respectivamente, botón del ratón pulsado y liberado.
MotionNotify
Indica que el ratón se ha movido. Hay tres tipos máscaras: PointerMotionMask (notifica cualquier movimiento), PointerMotionHintMask (notifica los movimientos de forma no continua) y ButtonMotionMask (sólo notifica movimiento cuando un botón está pulsado).
Expose
Se genera un evento por cada zona de la ventana que se ha hecho visible.
VisibilityNotify
Notifica cambios en la visibilidad de una ventana.
EnterWindow, LeaveWindow
Informa que el puntero ha entrado o salido de una ventana respectivamente.
PropertyNotify
Indica que se han producido cambios en el valor asociado a una propiedad.
ConfigureNotify
Informa del cambio de configuración (geometría u orden de apilamiento) de una ventana.
MapNotify
Notifica que una ventana ha sido proyectada.
SubstructureRedirectMask
Cuando un cliente (y sólo uno) selecciona esta máscara sobre una ventana, las peticiones de otros clientes para proyectar, cambiar la configuración o modificar el orden de apilamiento de una ventana hija de la especificada, no las lleva a cabo el servidor sino que manda un evento al cliente (redirección). Este mecanismo lo usa el gestor de ventanas.
ClientMessage
Usado para comunicación entre clientes. Está siempre seleccionado.
EVENTOS DE CONTROL
Eventos
Ya se ha dicho que las acciones del usuario sobre el programa se llaman eventos. Son eventos típicos el click sobre un botón, el hacer doble click sobre el nombre de un fichero para abrirlo, el arrastrar un icono, el pulsar una tecla o combinación de teclas, el elegir una opción de un menú, el escribir en una caja de texto o simplemente mover el ratón.
Se pueden realizar en cualquier control: click, doble click, movimiento del ratón. A estos eventos se les puede asociar código para que se ejecute al producir el evento.
MouseMove: al mover el raton por encima del control.
Mousedown: al pulsar cualquier boton del raton
Change: al cambiar el contenido del control
Click: al hacer click con el botón izquierdo del ratón sobre el control
Doubleclick: al hacer doble click con él con el botón izquierdo del ratón sobre
...