Gráficos vectoriales con Visual Basic .NET

Marzo 2003

Cipriano Valdezate Sayalero y Manuel Valdezate Sayalero

 


 

Eventos

 

El objeto Region nos regala el método IsVisible, que toma un punto o un rectángulo como argumento y nos devuelve un valor booleano que nos indica si ese punto o esa área rectangular son visibles en la pantalla y pertenecen a la región. Si aun siendo visibles no pertenecen a la región, devuelve False. Por tanto, si le entregamos el punto en que está situado el ratón, sabremos si está posicionado encima de la región. Esto nos permite reaccionar ante, por ejemplo, un click sobre una determinada figura. Vamos a ofrecer un ejemplo. Aprovechando la creación anterior, vamos a añadir el procedimiento de evento Sub Form1_MouseUp, que contiene en su parámetro e el punto sobre el que está colocado el botón, y vamos a discriminar sobre cuál de las tres tuberías azules ha hecho click el usuario:

 

Private MY As Decimal, Barra As Decimal

 

‘Hemos añadido las siguientes líneas

‘al final del Procedimiento “DibujaTuberías

TuberíasAzules = ClipRegion

‘MY = MargenY

 

Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp

        Try

 

        If TuberíasAzules.IsVisible(e.X, e.Y) Then 'Posición del ratón

                Dim orden As String

                Select Case e.Y

                    Case Is < MY + Barra * 2 'Primer tubo

                        orden = "primera"

                        Exit Select

                    Case Is < MY + Barra * 4 'Segundo tubo

                        orden = "segunda"

                        Exit Select

                    Case Is < MY + Barra * 6 'Tercer tubo

                        orden = "tercera"

                        Exit Select

 

                End Select

MessageBox.Show(String.Format("Click sobre la {0} tubería azul", orden))

            End If

        Catch x As Exception

            'MessageBox.Show(x.ToString)

        End Try

End Sub

 

Al hacer click sobre una barra azul, emerge un MessageBox diciéndonos sobre qué barra hemos hecho click. Tras darle a Aceptar, el rectánculo que ha ocupado se queda en blanco. Para recuperar el dibujo entera hay que volverlo a pintar. Podemos evitarnos esta preocupación añadiendo el procedimiento de evento:

 

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

        DibujaTuberías()

End Sub

 

Pero el dibujo es demasiado complejo y se producen destellos desagradables. No conocemos manera de evitar este efecto. Y esto es así porque GDI+, como dijimos al principio, no mantiene objetos en el lienzo, sino puntos que diferentes colores.

 


Índice del curso GDI+
 

la Luna del Guille o... el Guille que está en la Luna... tanto monta...