Hola a la lista, es la primera vez que escribo. Aún estoy aprendiendo a usar gambas
Construyendo clases en gambas, creé un pequeño programa con una clase heredada del objeto Drawningarea con un par de métodos y alguna propiedad que dibujaba un círculo. A esta clase la llamé DAPelota.
Después, en el formulario principal, instancié tres objetos de esta clase DApelota que, a su vez, dibujaba dentro de un DrawningArea padre. Y puse algunos controles de manera que llamaba al método de la pelota (DApelota) elegida. Incluso aprendí a manejar eventos ocurridos sobre esta clase DAPelota.
Todo funciona muy bien, pero, cuando pasa una pelota sobre otra, por mucho que las propiedades Backcolor o BackgroundColor estén a Transparent, se ve que el trozo no pintado de DAPelota se superpone a la inferior. ¿Cómo puedo evitar esta situación? Gracias.
Construyendo clases en gambas, creé un pequeño programa con una clase heredada del objeto Drawningarea con un par de métodos y alguna propiedad que dibujaba un círculo. A esta clase la llamé DAPelota.
Después, en el formulario principal, instancié tres objetos de esta clase DApelota que, a su vez, dibujaba dentro de un DrawningArea padre. Y puse algunos controles de manera que llamaba al método de la pelota (DApelota) elegida. Incluso aprendí a manejar eventos ocurridos sobre esta clase DAPelota.
Todo funciona muy bien, pero, cuando pasa una pelota sobre otra, por mucho que las propiedades Backcolor o BackgroundColor estén a Transparent, se ve que el trozo no pintado de DAPelota se superpone a la inferior. ¿Cómo puedo evitar esta situación? Gracias.
La clase es:
' gambas class file
INHERITS DrawingArea 'hereda las propiedades, métodos y eventos del Drawning Area
EXPORT 'Esto significa que la clase será visible desde un programa principal cuando creemos un componente.
PRIVATE hradio AS Integer 'esta variable es privada, y se usa sólo dentro de la clase
PRIVATE hcolor1 AS Long 'esta variable es privada, y se usa sólo dentro de la clase
PUBLIC inflada AS Boolean 'variable pública, accesible desde fuera de la clase
PUBLIC SUB _new() 'constructor
inflada = TRUE
ME.Cached = TRUE 'propiedades ME, las del objeto padre: en este caso del Drawning Area
ME.Border = Border.None
ME.BackColor = Color.Transparent
ME.Background = Color.Transparent
ME.width = 100
ME.height = 100
ME.left = 80
ME.top = 90
hcolor1 = Color.Red
hradio = 30
dibujarpelota 'llama a la función dibujar pelota.
END
'métodos get
PUBLIC FUNCTION getRadio() AS Integer
RETURN hradio
END
PUBLIC FUNCTION getColor() AS Long
RETURN hcolor1
END
'metodos set
PUBLIC SUB setRadio(num AS Integer)
hradio = num
END
PUBLIC SUB setColor(num AS Long)
hcolor1 = num
END
'métodos
'dibujar pelota
PUBLIC SUB dibujarpelota()
ME.width = hradio * 2 'radio de las pelotas convertido a tamaño del drawning area DApelota
ME.height = hradio * 2
ME.clear
Draw.Begin(ME) 'empieza el dibujo
Draw.Fillcolor = hcolor1
Draw.FillStyle = Fill.Solid
Draw.Circle(ME.width / 2, ME.Height / 2, hradio)
Draw.End
END
'dar patada
PUBLIC SUB darpatada(minx AS Integer, maxx AS Integer, miny AS Integer, maxy AS Integer)
DIM alex AS Integer
DIM aley AS Integer
RANDOMIZE
alex = Int(Rnd(1) * (maxx - minx)) + minx
aley = Int(Rnd(1) * (maxy - miny)) + miny
ME.left = alex
ME.top = aley
dibujarpelota
END
'cambia la propiedad del color del objeto
PUBLIC SUB ponercolor(num AS Long)
hcolor1 = num
dibujarpelota
END
INHERITS DrawingArea 'hereda las propiedades, métodos y eventos del Drawning Area
EXPORT 'Esto significa que la clase será visible desde un programa principal cuando creemos un componente.
PRIVATE hradio AS Integer 'esta variable es privada, y se usa sólo dentro de la clase
PRIVATE hcolor1 AS Long 'esta variable es privada, y se usa sólo dentro de la clase
PUBLIC inflada AS Boolean 'variable pública, accesible desde fuera de la clase
PUBLIC SUB _new() 'constructor
inflada = TRUE
ME.Cached = TRUE 'propiedades ME, las del objeto padre: en este caso del Drawning Area
ME.Border = Border.None
ME.BackColor = Color.Transparent
ME.Background = Color.Transparent
ME.width = 100
ME.height = 100
ME.left = 80
ME.top = 90
hcolor1 = Color.Red
hradio = 30
dibujarpelota 'llama a la función dibujar pelota.
END
'métodos get
PUBLIC FUNCTION getRadio() AS Integer
RETURN hradio
END
PUBLIC FUNCTION getColor() AS Long
RETURN hcolor1
END
'metodos set
PUBLIC SUB setRadio(num AS Integer)
hradio = num
END
PUBLIC SUB setColor(num AS Long)
hcolor1 = num
END
'métodos
'dibujar pelota
PUBLIC SUB dibujarpelota()
ME.width = hradio * 2 'radio de las pelotas convertido a tamaño del drawning area DApelota
ME.height = hradio * 2
ME.clear
Draw.Begin(ME) 'empieza el dibujo
Draw.Fillcolor = hcolor1
Draw.FillStyle = Fill.Solid
Draw.Circle(ME.width / 2, ME.Height / 2, hradio)
Draw.End
END
'dar patada
PUBLIC SUB darpatada(minx AS Integer, maxx AS Integer, miny AS Integer, maxy AS Integer)
DIM alex AS Integer
DIM aley AS Integer
RANDOMIZE
alex = Int(Rnd(1) * (maxx - minx)) + minx
aley = Int(Rnd(1) * (maxy - miny)) + miny
ME.left = alex
ME.top = aley
dibujarpelota
END
'cambia la propiedad del color del objeto
PUBLIC SUB ponercolor(num AS Long)
hcolor1 = num
dibujarpelota
END
El código FMAIN
' gambas class file
PUBLIC pelota1 AS Object[3]
PRIVATE observador[3] AS Observer 'Importante: ponerlo como private y admite array de esta manera
PUBLIC etiqueta AS Label 'objeto etiqueta
PUBLIC quepelota AS Integer
PUBLIC SUB Form_Open()
DIM i AS Integer
'dibuja pelota
FOR i = 0 TO 2
'Instancio nuevos objetos y le asigno el nombre de pelotaX
pelota1[i] = NEW DApelota(Canvas) AS "pelota" & (i + 1)
pelota1[i].darpatada(0, Canvas.width - pelota1[i].width, 0, Canvas.Height - pelota1[i].height)
'Instancio nuevos observadores y le asigno el nombre de observador.
observador[i] = NEW Observer(pelota1[i]) AS "Observador" & (i + 1)
NEXT
'valores de scroll
scbx.MinValue = pelota1[0].width / 2
scbx.MaxValue = Canvas.Width - pelota1[0].width / 2
scbx.Step = 10
scby.MinValue = pelota1[0].height / 2
scby.MaxValue = Canvas.Height - pelota1[0].height / 2
'etiqueta
etiqueta = NEW Label(Canvas) AS "etiquetados"
etiqueta.X = 0
etiqueta.Y = 0
etiqueta.width = 10
etiqueta.Height = 18
etiqueta.BackColor = Color.Transparent
etiqueta.Background = Color.Transparent
etiqueta.Visible = FALSE
etiqueta.Text = ""
END
PUBLIC SUB rbtn1_Click()
IF rbtn1.Value = TRUE THEN quepelota = 0
END
PUBLIC SUB rbtn2_Click()
IF rbtn2.Value = TRUE THEN quepelota = 1
END
PUBLIC SUB rbtn3_Click()
IF rbtn3.Value = TRUE THEN quepelota = 2
END
PUBLIC SUB btn1_Click()
pelota1[quepelota].dibujarpelota
END
PUBLIC SUB scbx_Change()
pelota1[quepelota].Left = scbx.Value - (pelota1[quepelota].width / 2)
END
PUBLIC SUB scby_Change()
pelota1[quepelota].Top = scby.Value - (pelota1[quepelota].height / 2)
END
PUBLIC SUB btndarpatada_Click()
pelota1[quepelota].darpatada(0, Canvas.width - pelota1[quepelota].width, 0, Canvas.Height - pelota1[quepelota].height)
END
PUBLIC SUB btncolor_Click()
Dialog.Color = pelota1[quepelota].getColor()
IF Dialog.SelectColor() THEN RETURN
pelota1[quepelota].ponercolor(Dialog.Color)
END
'******************************************************
'Eventos, que tienen que ser heredados del DrawningArea
'******************************************************
PUBLIC SUB Observador1_DblClick()
pelota1[0].ponercolor(Color.White)
END
PUBLIC SUB Observador2_DblClick()
pelota1[1].ponercolor(Color.Blue)
END
PUBLIC SUB Observador3_DblClick()
pelota1[2].ponercolor(Color.Yellow)
END
PUBLIC SUB Observador1_Enter()
etiqueta.X = pelota1[0].left + pelota1[0].width / 2 - etiqueta.width / 2
etiqueta.Y = pelota1[0].top + pelota1[0].height / 2 - etiqueta.height / 2
etiqueta.Background = pelota1[0].getColor()
etiqueta.Visible = TRUE
etiqueta.Text = "1"
END
PUBLIC SUB Observador1_Leave()
etiqueta.Text = ""
etiqueta.Visible = FALSE
END
PUBLIC SUB Observador2_Enter()
etiqueta.X = pelota1[1].left + pelota1[1].width / 2 - etiqueta.width / 2
etiqueta.Y = pelota1[1].top + pelota1[1].height / 2 - etiqueta.height / 2
etiqueta.Background = pelota1[1].getColor()
etiqueta.Visible = TRUE
etiqueta.Text = "2"
END
PUBLIC SUB Observador2_Leave()
etiqueta.Text = ""
etiqueta.Visible = FALSE
END
PUBLIC SUB Observador3_Enter()
etiqueta.X = pelota1[2].left + pelota1[2].width / 2 - etiqueta.width / 2
etiqueta.Y = pelota1[2].top + pelota1[2].height / 2 - etiqueta.height / 2
etiqueta.Background = pelota1[2].getColor()
etiqueta.Visible = TRUE
etiqueta.Text = "3"
END
PUBLIC SUB Observador3_Leave()
etiqueta.Text = ""
etiqueta.Visible = FALSE
END
PUBLIC pelota1 AS Object[3]
PRIVATE observador[3] AS Observer 'Importante: ponerlo como private y admite array de esta manera
PUBLIC etiqueta AS Label 'objeto etiqueta
PUBLIC quepelota AS Integer
PUBLIC SUB Form_Open()
DIM i AS Integer
'dibuja pelota
FOR i = 0 TO 2
'Instancio nuevos objetos y le asigno el nombre de pelotaX
pelota1[i] = NEW DApelota(Canvas) AS "pelota" & (i + 1)
pelota1[i].darpatada(0, Canvas.width - pelota1[i].width, 0, Canvas.Height - pelota1[i].height)
'Instancio nuevos observadores y le asigno el nombre de observador.
observador[i] = NEW Observer(pelota1[i]) AS "Observador" & (i + 1)
NEXT
'valores de scroll
scbx.MinValue = pelota1[0].width / 2
scbx.MaxValue = Canvas.Width - pelota1[0].width / 2
scbx.Step = 10
scby.MinValue = pelota1[0].height / 2
scby.MaxValue = Canvas.Height - pelota1[0].height / 2
'etiqueta
etiqueta = NEW Label(Canvas) AS "etiquetados"
etiqueta.X = 0
etiqueta.Y = 0
etiqueta.width = 10
etiqueta.Height = 18
etiqueta.BackColor = Color.Transparent
etiqueta.Background = Color.Transparent
etiqueta.Visible = FALSE
etiqueta.Text = ""
END
PUBLIC SUB rbtn1_Click()
IF rbtn1.Value = TRUE THEN quepelota = 0
END
PUBLIC SUB rbtn2_Click()
IF rbtn2.Value = TRUE THEN quepelota = 1
END
PUBLIC SUB rbtn3_Click()
IF rbtn3.Value = TRUE THEN quepelota = 2
END
PUBLIC SUB btn1_Click()
pelota1[quepelota].dibujarpelota
END
PUBLIC SUB scbx_Change()
pelota1[quepelota].Left = scbx.Value - (pelota1[quepelota].width / 2)
END
PUBLIC SUB scby_Change()
pelota1[quepelota].Top = scby.Value - (pelota1[quepelota].height / 2)
END
PUBLIC SUB btndarpatada_Click()
pelota1[quepelota].darpatada(0, Canvas.width - pelota1[quepelota].width, 0, Canvas.Height - pelota1[quepelota].height)
END
PUBLIC SUB btncolor_Click()
Dialog.Color = pelota1[quepelota].getColor()
IF Dialog.SelectColor() THEN RETURN
pelota1[quepelota].ponercolor(Dialog.Color)
END
'******************************************************
'Eventos, que tienen que ser heredados del DrawningArea
'******************************************************
PUBLIC SUB Observador1_DblClick()
pelota1[0].ponercolor(Color.White)
END
PUBLIC SUB Observador2_DblClick()
pelota1[1].ponercolor(Color.Blue)
END
PUBLIC SUB Observador3_DblClick()
pelota1[2].ponercolor(Color.Yellow)
END
PUBLIC SUB Observador1_Enter()
etiqueta.X = pelota1[0].left + pelota1[0].width / 2 - etiqueta.width / 2
etiqueta.Y = pelota1[0].top + pelota1[0].height / 2 - etiqueta.height / 2
etiqueta.Background = pelota1[0].getColor()
etiqueta.Visible = TRUE
etiqueta.Text = "1"
END
PUBLIC SUB Observador1_Leave()
etiqueta.Text = ""
etiqueta.Visible = FALSE
END
PUBLIC SUB Observador2_Enter()
etiqueta.X = pelota1[1].left + pelota1[1].width / 2 - etiqueta.width / 2
etiqueta.Y = pelota1[1].top + pelota1[1].height / 2 - etiqueta.height / 2
etiqueta.Background = pelota1[1].getColor()
etiqueta.Visible = TRUE
etiqueta.Text = "2"
END
PUBLIC SUB Observador2_Leave()
etiqueta.Text = ""
etiqueta.Visible = FALSE
END
PUBLIC SUB Observador3_Enter()
etiqueta.X = pelota1[2].left + pelota1[2].width / 2 - etiqueta.width / 2
etiqueta.Y = pelota1[2].top + pelota1[2].height / 2 - etiqueta.height / 2
etiqueta.Background = pelota1[2].getColor()
etiqueta.Visible = TRUE
etiqueta.Text = "3"
END
PUBLIC SUB Observador3_Leave()
etiqueta.Text = ""
etiqueta.Visible = FALSE
END
Imagen del diseño de FMain. El Drawningarea principal se llama canvas
clasepelotas2.zip | ||
Descripción: | programa de ejemplo | Descargar |
Nombre del archivo: | clasepelotas2.zip | |
Tamaño: | 16.04 KB | |
Descargado: | 47 veces |
clasepelotas2.zip | ||
Descripción: | programa de ejemplo | Descargar |
Nombre del archivo: | clasepelotas2.zip | |
Tamaño: | 16.04 KB | |
Descargado: | 47 veces |
clasepelotas2.zip | ||
Descripción: | programa de ejemplo | Descargar |
Nombre del archivo: | clasepelotas2.zip | |
Tamaño: | 16.04 KB | |
Descargado: | 47 veces |