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
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