• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ribeiro55

[GDI+] - Árvore de Natal de 2009 [transferido para wiki]

10 mensagens neste tópico

[glow=red,1,100]Ora então um feliz Natal para todos na comunidade![/glow]

'depois de abrir um projecto novo, no código do form:
Imports System.Drawing
Imports System.Drawing.Drawing2D

Public Class Form1

   Private Luzes As New List(Of Point)
   Private R As New Random
   Private FNT As New Font("Arial", 20, FontStyle.Bold)
   Private WithEvents Piscar As New Timer With {.Interval = 500, .Enabled = True}

   Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
       End
   End Sub

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Me.Size = New Size(250, 600)
       Me.Top = CInt((Screen.PrimaryScreen.Bounds.Height / 2) - (Me.Height / 2))
       Me.Left = CInt((Screen.PrimaryScreen.Bounds.Width / 2) - (Me.Width / 2))
       Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None

       Dim B As New Bitmap(ClientSize.Width, ClientSize.Height)
       Dim G As Graphics = Graphics.FromImage(B)

       Dim BGLGB As New LinearGradientBrush(New Point(CInt(B.Width / 2), 0), New Point(CInt(B.Width / 2), 600), Color.DarkBlue, Color.Blue)

       Dim LGB1 As New LinearGradientBrush(New Point(125, 20), New Point(125, 470), Color.White, Color.DarkGreen)
       Dim LGB2 As New LinearGradientBrush(New Point(125, 20), New Point(125, 353), Color.White, Color.DarkGreen)
       Dim LGB3 As New LinearGradientBrush(New Point(125, 0), New Point(125, 236), Color.White, Color.DarkGreen)
       Dim LGB4 As New LinearGradientBrush(New Point(125, 0), New Point(125, 120), Color.White, Color.DarkGreen)

       Dim T1() As PointF = {New PointF(125, 20), New Point(10, 470), New PointF(230, 470)}
       Dim T2() As PointF = {New PointF(125, 20), New Point(20, 353), New PointF(220, 353)}
       Dim T3() As PointF = {New PointF(125, 20), New Point(30, 236), New PointF(210, 236)}
       Dim T4() As PointF = {New PointF(125, 20), New Point(40, 120), New PointF(200, 120)}

       G.FillRectangle(BGLGB, 0, 0, B.Width, B.Height)

       Dim R As New Random

       For P = 1 To 500
           G.FillEllipse(Brushes.White, R.Next(0, B.Width), R.Next(0, B.Height), 2, 2)
       Next

       Dim Estrela() As PointF = {New PointF(0 + 115, 10), New PointF(5 + 115, 10), _
                                  New PointF(10 + 115, 0), New PointF(15 + 115, 10), _
                                  New PointF(20 + 115, 10), New PointF(15 + 115, 15), _
                                  New PointF(20 + 115, 25), New PointF(10 + 115, 18), _
                                  New PointF(0 + 115, 25), New PointF(5 + 115, 15), _
                                  New PointF(0 + 115, 10), New PointF(0 + 115, 0)}

       G.FillPolygon(LGB1, T1) : G.DrawPolygon(New Pen(Color.Black, 2), T1)
       G.FillPolygon(LGB2, T2) : G.DrawPolygon(New Pen(Color.Black, 2), T2)
       G.FillPolygon(LGB3, T3) : G.DrawPolygon(New Pen(Color.Black, 2), T3)
       G.FillPolygon(LGB4, T4) : G.DrawPolygon(New Pen(Color.Black, 2), T4)

       G.FillPolygon(Brushes.Yellow, Estrela)

       G.FillRectangle(Brushes.Brown, 100, 470, 50, (600 - 470))

       G.DrawRectangle(New Pen(Color.Black, 2), 100, 470, 50, (600 - 470))

       Luzes.Add(New Point(72, 105)) : Luzes.Add(New Point(100, 70)) :
       Luzes.Add(New Point(136, 101)) : Luzes.Add(New Point(176, 105))
       Luzes.Add(New Point(127, 52)) : Luzes.Add(New Point(90, 134))
       Luzes.Add(New Point(149, 139)) : Luzes.Add(New Point(121, 160))
       Luzes.Add(New Point(69, 206)) : Luzes.Add(New Point(133, 215))
       Luzes.Add(New Point(106, 186)) : Luzes.Add(New Point(167, 180))
       Luzes.Add(New Point(152, 217)) : Luzes.Add(New Point(68, 251))
       Luzes.Add(New Point(128, 298)) : Luzes.Add(New Point(165, 253))
       Luzes.Add(New Point(109, 256)) : Luzes.Add(New Point(52, 333))
       Luzes.Add(New Point(75, 296)) : Luzes.Add(New Point(127, 328))
       Luzes.Add(New Point(187, 328)) : Luzes.Add(New Point(170, 286))
       Luzes.Add(New Point(63, 369)) : Luzes.Add(New Point(169, 394))
       Luzes.Add(New Point(94, 418)) : Luzes.Add(New Point(120, 368))
       Luzes.Add(New Point(36, 441)) : Luzes.Add(New Point(113, 453))
       Luzes.Add(New Point(201, 429)) : Luzes.Add(New Point(142, 447))
       Luzes.Add(New Point(186, 386))

       Me.BackgroundImage = B
   End Sub

   Private Sub Piscar_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Piscar.Tick
       Dim G As Graphics = Me.CreateGraphics
       For Each P As Point In Luzes
           Dim TB As New SolidBrush(DarCor())
           G.FillEllipse(TB, P.X, P.Y, 10, 10)
       Next

       Dim TempMsg As String = "FELIZ NATAL"
       Dim TempTam As SizeF = G.MeasureString(TempMsg, FNT)
       G.DrawString(TempMsg, FNT, New SolidBrush(DarCor), 125 - (TempTam.Width / 2), 500)
       G.DrawString(TempMsg, FNT, New SolidBrush(DarCor), 125 - (TempTam.Width / 2) + 2, 500 + 2)
       G.DrawString(TempMsg, FNT, New SolidBrush(DarCor), 125 - (TempTam.Width / 2) + 4, 500 + 4)
   End Sub

   Private Function DarCor() As Color
       Dim Cor1 As Color = Color.LightGreen
       Dim Cor2 As Color = Color.Blue
       Dim Cor3 As Color = Color.Red
       Dim Cor4 As Color = Color.Yellow

       Select Case CInt(R.Next(1, 4))
           Case 1 : Return Cor1
           Case 2 : Return Cor2
           Case 3 : Return Cor3
           Case 4 : Return Cor4
       End Select

   End Function

End Class

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Os meus dotes de desenho deixam um pouco a desejar, mas o que importa é a mensagem! (e o código fonte :))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alguém pode tirar uma screen do resultado? Não tenho o VB instalado, mas gostava de ver a prenda que o ribeiro nos ofereceu com tanto carinho :)

Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alguém pode tirar uma screen do resultado? Não tenho o VB instalado, mas gostava de ver a prenda que o ribeiro nos ofereceu com tanto carinho :)

Cumps.

É um "gif", mas aqui fica a "imagem estática" :)

prenda.jpg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Está muito giro :) Bom trabalho ribeiro! (e também uma boa demonstração das capacidades gráficas da framework).

Cumps e boas festas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora