creamos un new project de tipo formulario windows
1_creamos la interfaz . utilizamos radios button(cambiamos su propiedad name y le ponemos (optwin,optball,opttext))respectivamente
2_APlicamos en siguiente
Código
Imports System.Drawing.Drawing2D Imports System.Drawing.Text Public Class Form2 Const WinkTimerInterval As Integer = 150 ' En milisegundos Protected eyeImages(6) As Image Protected currentImage As Integer = 0 Protected animationStep As Integer = 1 Const BallTimerInterval As Integer = 25 ' En milisegundos Private ballSize As Integer = 16 ' Como una fracción del área de cliente Private moveSize As Integer = 4 ' Como una fracción del tamaño de la pelota Private bitmap As Bitmap Private ballPositionX As Integer Private ballPositionY As Integer Private ballRadiusX As Integer Private ballRadiusY As Integer Private ballMoveX As Integer Private ballMoveY As Integer Private ballBitmapWidth As Integer Private ballBitmapHeight As Integer Private bitmapWidthMargin As Integer Private bitmapHeightMargin As Integer Const TextTimerInterval As Integer = 15 ' En milisegundos Protected currentGradientShift As Integer = 10 Protected gradiantStep As Integer = 5 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load eyeImages(0) = My.Resources.dorita eyeImages(1) = My.Resources.bwall58 eyeImages(2) = My.Resources.dorita eyeImages(3) = My.Resources.aioros eyeImages(4) = My.Resources.assasain eyeImages(5) = My.Resources.bwall58 End Sub Private Sub exitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles exitToolStripMenuItem.Click Me.Close() End Sub Private Sub optWink_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optWink.CheckedChanged If optWink.Checked Then tmrAnimation.Interval = WinkTimerInterval ElseIf optBall.Checked Then tmrAnimation.Interval = BallTimerInterval ElseIf optText.Checked Then tmrAnimation.Interval = TextTimerInterval End If OnResize(EventArgs.Empty) End Sub Private Sub optBall_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optBall.CheckedChanged If optWink.Checked Then tmrAnimation.Interval = WinkTimerInterval ElseIf optBall.Checked Then tmrAnimation.Interval = BallTimerInterval ElseIf optText.Checked Then tmrAnimation.Interval = TextTimerInterval End If OnResize(EventArgs.Empty) End Sub Protected Overrides Sub OnResize(ByVal ea As EventArgs) If optWink.Checked Then ' Obtenga el objeto Graphics expuesto por el formulario y borre todos los dibujos. Dim grfx As Graphics = CreateGraphics() ' También puede llamar a grfx.Clear(BackColor) o Me.Invalidate() para borrar ' la pantalla. Me.Refresh() grfx.Dispose() ElseIf optBall.Checked Then ' Obtenga el objeto Graphics expuesto por el formulario y borre todos los dibujos. Dim grfx As Graphics = CreateGraphics() grfx.Clear(BackColor) ' Defina el radio de la pelota en una fracción del ancho o el alto ' del área de cliente, el que sea menor. Dim dblRadius As Double = Math.Min(ClientSize.Width / grfx.DpiX, _ ClientSize.Height / grfx.DpiY) / ballSize ' Defina el ancho y el alto de la pelota, ya que normalmente el DPI es ' idéntico en los ejes X e Y. ballRadiusX = CInt(dblRadius * grfx.DpiX) ballRadiusY = CInt(dblRadius * grfx.DpiY) grfx.Dispose() ' Defina la distancia que recorre la pelota en 1 píxel o en una fracción del ' tamaño de la pelota, lo que sea mayor. De esta forma, la distancia que ' recorre la pelota cada vez que se dibuja será proporcional a su tamaño que, ' a su vez, será proporcional al tamaño del área de cliente. Por tanto, cuando ' el área de cliente se reduce, disminuye la velocidad de la pelota, y cuando ' aumenta, se incrementa la velocidad de la pelota. ballMoveX = CInt(Math.Max(1, ballRadiusX / moveSize)) ballMoveY = CInt(Math.Max(1, ballRadiusY / moveSize)) 'Observe que el valor del movimiento de la pelota sirve también como ' margen en torno a la pelota, que determina el tamaño del mapa de bits ' real en el que se dibuja la pelota. Por tanto, la distancia recorrida por la pelota ' es exactamente igual al tamaño del mapa de bits, lo que permite borrar ' la imagen anterior de la pelota antes de que se dibuje la siguiente imagen, y ' todo ello sin que se produzca un parpadeo excesivo. bitmapWidthMargin = ballMoveX bitmapHeightMargin = ballMoveY ' Determine el tamaño real del mapa de bits en el que se dibuja la pelota ' agregando los márgenes a las dimensiones de la pelota. ballBitmapWidth = 2 * (ballRadiusX + bitmapWidthMargin) ballBitmapHeight = 2 * (ballRadiusY + bitmapHeightMargin) ' Cree un nuevo mapa de bits pasando el ancho y el alto bitmap = New Bitmap(ballBitmapWidth, ballBitmapHeight) ' Obtenga el objeto Graphics expuesto por el mapa de bits, limpie la pelota ' existente y dibuje la nueva pelota. grfx = Graphics.FromImage(bitmap) With grfx .Clear(BackColor) .FillEllipse(Brushes.Red, New Rectangle(ballMoveX, _ ballMoveY, 2 * ballRadiusX, 2 * ballRadiusY)) .Dispose() End With ' Restablezca la posición de la pelota en el centro del área de cliente. ballPositionX = CInt(ClientSize.Width / 2) ballPositionY = CInt(ClientSize.Height / 2) ElseIf optText.Checked Then ' Obtenga el objeto Graphics expuesto por el formulario y borre todos los dibujos. Dim grfx As Graphics = CreateGraphics() grfx.Clear(BackColor) End If End Sub Private Sub tmrAnimation_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrAnimation.Tick If optWink.Checked Then ' Obtenga el objeto Graphics expuesto por el formulario. Dim grfx As Graphics = CreateGraphics() ' Llame a DrawImage, mediante Overload #8, que obtiene la imagen actual para su ' presentación, las coordenadas X e Y (que, en este caso, centra la ' imagen en el área de cliente) y el ancho y alto de la imagen. grfx.DrawImage(eyeImages(currentImage), _ CInt((ClientSize.Width - eyeImages(currentImage).Width) / 2), _ CInt((ClientSize.Height - eyeImages(currentImage).Height) / 2), _ eyeImages(currentImage).Width, _ eyeImages(currentImage).Height) ' Es aconsejable que siempre se llame a Dispose para los objetos que exponen este ' método, en lugar de esperar a que el recolector de elementos no utilizados se ejecute automáticamente. ' De esta forma, obtendrá siempre un mayor rendimiento de la aplicación. grfx.Dispose() ' Recorra en bucle las imágenes. currentImage += animationStep If currentImage = 5 Then ' Ésta es la última imagen de las cuatro, por lo que debe invertir el orden de ' animación . animationStep = -1 ElseIf currentImage = 0 Then ' Ésta es la primera imagen , por lo que debe invertir el orden de ' animación animationStep = 1 End If ElseIf optBall.Checked Then ' Obtenga el objeto Graphics expuesto por el formulario. Dim grfx As Graphics = CreateGraphics() ' Dibuje el mapa de bits que contiene la pelota en el formulario. grfx.DrawImage(bitmap, _ CInt(ballPositionX - ballBitmapWidth / 2), _ CInt(ballPositionY - ballBitmapHeight / 2), _ ballBitmapWidth, ballBitmapHeight) grfx.Dispose() ' Aumente la posición de la pelota en la distancia que se ha ' movido en las coordenadas X e Y después de haber sido redibujada. ballPositionX += ballMoveX ballPositionY += ballMoveY ' Invierta la dirección de la pelota cuando toque un extremo. If ballPositionX + ballRadiusX >= ClientSize.Width _ Or ballPositionX - ballRadiusX <= 0 Then ballMoveX = -ballMoveX Beep() End If ' Defina el extremo Y en 80 en lugar de en 0 para que la pelota no rebote ' en los controles del formulario. If ballPositionY + ballRadiusY >= ClientSize.Height _ Or ballPositionY - ballRadiusY <= 80 Then ballMoveY = -ballMoveY Beep() End If ElseIf optText.Checked Then ' Obtenga el objeto Graphics expuesto por el formulario. Dim grfx As Graphics = CreateGraphics() ' Defina el tipo de fuente, el texto y determine su tamaño. Dim font As New Font("Microsoft Sans Serif", 96, _ FontStyle.Bold, GraphicsUnit.Point) Dim strText As String = "Javier_Vidarte_Delgado " Dim sizfText As New SizeF(grfx.MeasureString(strText, font)) ' Defina el punto en el que se va a dibujar el texto: centrado ' en el área de cliente. Dim ptfTextStart As New PointF( _ CSng(ClientSize.Width - sizfText.Width) / 2, _ CSng(ClientSize.Height - sizfText.Height) / 2) ' Defina el punto inicial y final de inclinación; este último se ajustará ' mediante un valor cambiante para producir el efecto de animación. Dim ptfGradientStart As New PointF(0, 0) Dim ptfGradientEnd As New PointF(currentGradientShift, 200) ' Cree una instancia del pincel utilizado para dibujar el texto. Dim grBrush As New LinearGradientBrush(ptfGradientStart, _ ptfGradientEnd, Color.Blue, BackColor) ' Dibuje el texto centrado en el área de cliente. grfx.DrawString(strText, font, grBrush, ptfTextStart) grfx.Dispose() ' Mueva la inclinación e inviértala cuando obtenga un determinado valor. currentGradientShift += gradiantStep If currentGradientShift = 500 Then gradiantStep = -5 ElseIf currentGradientShift = -50 Then gradiantStep = 5 End If End If End Sub End Class