Shell   20-02-2024, 00:22
#1
Buenas!.

En este ejemplo. Lo que traté fue de que algo que ocurre en un formulario se informe en otro.
En este caso son sprites/dibujos que rebotan por el área de un control DrawingArea y cuando
llega a uno de los bordes del control DrawingArea se crea un evento, independiente del objeto.
Cada uno crea los suyos. Los llamo rectángulos, pero son cuadrados.

[Imagen: k8zRMG9.png]

Así en el FMain tengo:

Código:
Const NUMDECUADRADOS As Integer = 3
Const ANCHOVENTANA As Integer = 600
Const ALTOVENTANA As Integer = 600

Private figuras As Rectangulo[]

Private unrect As Rectangulo
Private unformulario As FormTestContenedores

Private obs As Observer

El número de cuadrados es definible, a más cuadrados, mas información en el formulario de seguimiento.
Cada uno de los objetos creados va a tener su observador.

Código:
For i As Integer = 0 To NUMDECUADRADOS - 1
    unrect = New Rectangulo([Pizarra.W / 2, Pizarra.h / 2], [Rand(-5, 5), Rand(-5, 5)], pizarra, i)
    figuras.Add(unrect)
    obs = New Observer(figuras) As "Vigilo"
  Next

El FMain se encarga de informar al formulario de seguimiento de lo que está ocurriendo.
En la clase rectángulo:

Código:
Event Izquierdo(mensaje As String, indice As Integer)
Event Derecho(mensaje As String, indice As Integer)
Event Superior(mensaje As String, indice As Integer)
Event Inferior(mensaje As String, indice As Integer)

Y el lanzador de eventos.

Código:
Public Sub Actualizar()

  If Me.xy[0] < 0 Then
    Raise Izquierdo("Rectángulo choca con borde izquierdo", Me.indice)
    Me.acel[0] *= -1
  Else If Me.xy[0] > Me.area.W - ANCHORECT Then
    Raise Derecho("Renctángulo choca borde derecho", Me.indice)
    Me.acel[0] *= -1
  Endif

  If Me.xy[1] > Me.area.H - ALTORECT Then
    Raise Inferior("Rectángulo choca con borde inferior", Me.indice)
    Me.acel[1] *= -1
  Else If Me.xy[1] < 0 Then
    Raise Superior("Rectángulo choca con borde superior", Me.indice)
    Me.acel[1] *= -1
  Endif

  Me.xy[0] += Me.acel[0]
  Me.xy[1] += Me.acel[1]

End

( Me estoy dando cuenta que sobra el observador que tiene la propia clase ). No es sencillo estos temas.
Nos vamos basando en ejemplos que hemos visto anteriormente.

Y en el formulario que se muestra el seguimiento de los objetos. Se encuentra el procedimiento:
MostrarMensaje(mensaje , indice)

En el formulario de monitorización se crean una serie de contenedores que se van repitiendo según
el número de sprites por el área de dibujo.

El número del tag del contenedor en el que se muestra el mensaje tiene su propiedad Tag igual a 1.
Por cada uno de los sprites se va mirando su estado y se muestra en el que contenedor que le corresponde.

Código:
Public Sub MostrarMensaje(mensaje As String, indice As Integer)

  Dim ob As Object

  For Each ob In paneles[indice].Children
    If ob.tag = 1 Then
      ob.text = mensaje
      Break
    Endif
  Next

End

Es un tema a estudiar, el generar eventos personalizados y controlarlos.

Saludos
Archivos adjuntos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema: 2 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.