Páginas

martes, 1 de noviembre de 2011

Gambas2 y OOP Trabajando con clases (07) Trabajando con Eventos


Eventos en Gambas


Hasta ahora habiamos visto tanto las clases como los métodos en gambas, pero nada de los eventos.



Un evento, es "un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera."


Vamos a ver un ejemplo de una clase "cir" que hereda de un drawingArea, a esta clase  que vamos a definirle un "observador" que va a realizar distintas acciones (cambio de color) cuando entremos (Enter), salimos (Leave) o movamos el raton (mousemove):




' Gambas class file: cir.class


INHERITS DrawingArea

'aqui es donde añado el observador                                                                                                                  

PRIVATE observador AS NEW Observer(ME) AS "Observador1"

PROPERTY numero AS Float
PRIVATE hnumero AS Integer

PUBLIC SUB _new() 'constructor
ME.Cached = TRUE 'Doy valores a las propiedades del  Objeto que heredo: en este caso del Drawning Area
ME.Border = Border.sunken
ME.BackColor = Color.Transparent
ME.Background = Color.Transparent
ME.width = 25
ME.height = 25
ME.left = Rnd(1, 550) 'le doy un valor aleatorio
ME.top = Rnd(1, 550) ' le doy un valor aleatorio

valorx = ME.Left
valory = ME.Top
dibujarojo 'llama a la función dibujar pelota.

END

PUBLIC SUB dibujaRojo()
Draw.Begin(ME) 'empieza el dibujo
Draw.Fillcolor = Color.red
Draw.FillStyle = Fill.Solid
Draw.Circle(ME.width / 2, ME.Height / 2, 7)
Draw.End
END

PUBLIC SUB dibujaBlanco()
Draw.Begin(ME) 'empieza el dibujo
Draw.Fillcolor = Color.white
Draw.FillStyle = Fill.Solid
Draw.Circle(ME.width / 2, ME.Height / 2, 7)
Draw.End
END

PUBLIC SUB dibujaverde()
Draw.Begin(ME) 'empieza el dibujo
Draw.Fillcolor = Color.green
Draw.FillStyle = Fill.Solid
Draw.Circle(ME.width / 2, ME.Height / 2, 7)
Draw.End
END

PUBLIC SUB Observador1_Enter()

' Si entro "Enter" en el objeto dibujo lo siguiente...
dibujaBlanco()


END


PUBLIC SUB Observador1_Leave()

' Si abandono "Leave"  el objeto dibujo lo siguiente...

    dibujaRojo()
END

PUBLIC SUB Observador1_mousemove()

' Cuando muevo el raton dentro del objeto hago que su posicion tambien cambie...

ME.left += Mouse.X - 12.5
ME.top += Mouse.y - 12.5
valorx = ME.Left
valory = ME.Top
dibujaverde()
END

PRIVATE FUNCTION numero_Read() AS Float
RETURN hnumero
END

PRIVATE SUB numero_Write(Value AS Float)
hnumero = value
END



¿como uso esta clase en un formulario Fmain?

' Gambas class file
CONST contador AS Integer = 5
PUBLIC circulo AS Object[contador]

PUBLIC SUB Form_Open()
DIM a AS Integer
FOR a = 0 TO circulo.count - 1
circulo[a] = NEW cir(DrawingArea1)
circulo[a].numero = a
circulo[a].dibujaRojo()
NEXT
END



Nota:
DrawingArea1, es un DrawingArea creado dentro del formulario Fmain, donde van a dibujarse los "cir"


Aqui podeis ver un video realizado con el código anterior: (enlace de descarga del codigo fuente)






Podeis ver un ejemplo real de uso de Eventos, en el clase Tableviews.class que hereda del control  Gridviews

Enlace de descarga TableView.class



Fuente:
http://www.gambas-es.org/objetos-drawningarea-vf4-vt1985.html