Ejemplo visual (fondo mobible-aleatorio imagenes-texto personalizado)

Iniciado por _-Javier-_, 21 Enero 2011, 20:23 PM

0 Miembros y 1 Visitante están viendo este tema.

_-Javier-_

Utilizaremos visual studio 2008
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 (vbnet) [Seleccionar]


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





Uploaded with ImageShack.us