Visual Basic .Net Guía 08 - Animación de objetos en VB .NET II 36 Practica 51 Dibujar rectangulos con uso de los eventos Presionar y soltar click para dibujar Interface Usamos una ventana vacia Damos dobleclick en la ventana y luego Cambiamos los eventos form1_load() por Form1_MouseDown() y form1_MouseUp() La codificación Public Class Form1 Dim rectangulo As Rectangle Dim Ancho As Integer = 5 Private Sub Form1_MouseDown1(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown ' Coordenadas iniciales del rectangulo rectangulo.X = e.X rectangulo.Y = e.Y End Sub Private Sub Form1_MouseUp1(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp ' Determinar ancho y altura del rectangulo If e.X < rectangulo.X Then rectangulo.Width = rectangulo.X - e.X rectangulo.X = e.X Else rectangulo.Width = e.X - rectangulo.X End If If e.Y < rectangulo.Y Then rectangulo.Height = rectangulo.Y - e.Y rectangulo.Y = e.Y Else rectangulo.Height = e.Y - rectangulo.Y End If ' Forzar el repintado de la region ocupada por el rectangulo Me.Invalidate(rectangulo) End Sub Private Sub Form1_Paint1(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint ' dibujar el rectangulo e.Graphics.DrawRectangle(New Pen(Color.Blue, Ancho), rectangulo) End Sub End Class www.dariolara.com Guía 08 - Animación de objetos en VB .NET II Visual Basic .Net 33 Animación de objetos en VB .NET II Introducción Presentamos en esta guía algunas animaciones más complejas que exigen algo de matemáticas, trigonometría, etc. Practica 45 Animar un pequeño rectángulo Interface y Propiedades Timer1: Enabled = True Interval = 100 Codificación Public Class form1 Dim rectangulo As Rectangle Dim Ancho As Integer = 5 Dim a%, b% ‘ Cambie el evento form1_load() por el evento form1_paint( …. y copie el codigo ….. Private Sub form1_Paint1(ByVal sender As Object, ByVal e As ……….. ' Dibujar el rectangulo en el evento Paint de form1 e.Graphics.DrawRectangle(New Pen(Color.Blue, Ancho), rectangulo) End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e …………… ' Animar con coordenadas a y b incrementandolas a=a+1 b=b+1 rectangulo.Height = 10 rectangulo.Width = 10 rectangulo.X = a rectangulo.Y = b Me.Invalidate() End Sub End Class www.dariolara.com Visual Basic .Net Guía 08 - Animación de objetos en VB .NET II 34 Practica 46 Reloj analógico Una animación más compleja y con mejor presentación es la que se presenta como practica en este documento. Consiste en simular un reloj de punteros. Utilizamos el control Timer para el control de tiempo. La relación de la propiedad Interval es de 1000 pulsos equivalen aproximadamente a un segundo. Nota Para esta práctica utilizamos una línea trazada desde un punto x1,y1 que corresponde al centro de la circunferencia del reloj, hasta el punto x2, y2, el extremo del segundero. Guía 08 - Animación de objetos en VB .NET II Visual Basic .Net 35 segundos1 = Second(Now) angulo1 = (segundos1 * 6 * 6.28 / 360) - (15 * 6 * 6.28 / 360) radio1 = 100 x2 = x1 + radio1 * Math.Cos(angulo1) y2 = y1 + radio1 * Math.Sin(angulo1) Me.Invalidate() End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load x1 = 150 y1 = 150 x2 = 150 y2 = 150 End Sub Private Sub Form1_Paint1(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint e.Graphics.DrawLine(Pens.Black, x1, y1, x2, y2) e.Graphics.DrawEllipse(Pens.Blue, 50, 50, 200, 200) End Sub End Class Nota Usted debe agregar una imagen de fondo para su reloj Practicas propuestas Practica 47 Se propone agregar el minutero y el horario al reloj analógico de la practica anterior Tenga en cuenta que el horario solo cuenta 12 horas en el recorrido de la circunferencia de 360 grados, y por tanto el angulo es diferente. Para el minutero y el horario usamos funciones minute( ) y hour() Practica 48 Diseñe un cronometro segundero que puede iniciar, detener y reiniciar a cero tanto el segundero como los segundos en una caja de texto Esta práctica es para mostrar solo el círculo del reloj y el segundero. Codificación Practica 49 Piense en un termómetro de caratula que convierte grados Farenheit a grados Celsius y viceversa. Public Class Form1 Dim angulo1!, segundos1!, radio1!, x1!, y1!, x2!, y2! Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick TextBox1.Text = Hour(Now) & ":" & Minute(Now) & ":" & Second(Now) Practica 50 Diseñe un sistema de plumillas para el parabrisas de un carro. Las plumillas pueden ir más rápido cuando se controlan con una barra de desplazamiento horizontal www.dariolara.com www.dariolara.com