VB.NET - Desenhando figuras
Neste artigo irei rever alguns pontos básicos :
|
- Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)
- Altere o nome do formulário padrão para frmMain e o nome do arquivo para frmMain.vb
- O formulário - frmmain - deverá ter a seguinte aparência :
Inclua o componente MainMenu no formulário e crie um menu com a seguinte estrutura:
Menu | ||||
Nível 1 Texto |
Nível 2 Texto |
Nível 3 Texto |
Nome(Propriedade Name de Menuitem) | Checked |
&Arquivo | (nome padrão) | |||
&Figuras | (nome padrão) | |||
&Quadrado | mnuQuadrados | True | ||
&Retângulo | mnuRetangulos | False | ||
&Círculo | mnuCirculos | False | ||
&Elipse | mnuElipses | False | ||
&Limpar | mnuLimpar | False | ||
&Executar | mnuExecutaPara | False | ||
(Insert Separator) | ||||
&Sair | mnSair | False |
Vamos incluir um controle Timer no formulário - frmMain.vb e defina as propriedades do controle como abaixo:
Timer |
|
Propriedade | Valor |
Name | tmrDesenho |
Enabled | False |
Interval | 300 |
O controle Timer possui somente um Evento - Tick - iremos colocar o código associado a este evento de modo que o mesmo seja executado a um intervalo de tempo definido. O número de ticks por segundo é definido pelo propriedade Interval que utiliza o milisegundos (a milionésima parte do segundo). Como definimos Interval igual a 300 ele ocorrerá a cada 3/10 de um segundo.
O código que iremos colocar no evento Tick é o seguinte:
Private
Sub Timer1_Tick(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles Timer1.Tick
'Os valores para estas variáveis serão gerados aleatóriamente Dim iRed, iGreen, iBlue As Integer Dim iX, iY As Integer Dim iSize As Integer'Determina a largura dos retangulos e elipses Dim iRectWidth As Integer 'Cria uma variável de referência a classe Graphics Dim g As Graphics
'Referencia g a objeto Graphics object do formulário(Me). Com isto podemos usar os métodos DrawRectangle e DrawEllipse g = Me.CreateGraphics
'Utiliza Randomize para gerar a semente do gerador de números aleatórios. Randomize()
'Gera valores aleatórios entre 0 e 255 para a cor iRed = Int(Rnd() * 256) iGreen = Int(Rnd() * 256) iBlue = Int(Rnd() * 256)
'Cria um drawing Pen, definindo sua cor e espessura Dim PenaDesenho As New Pen(System.Drawing.Color.FromArgb(iRed, iGreen, iBlue), 1)
'Gera valores aleatórios entre 5 e 50, para o tamanho das figuras em pixels iSize = Int(Rnd() * 46) + 5
'Gera as posições iniciais X eY para desenha a figura dentro da área do formulário iX = Int(Rnd() * Me.Width) + 1iY = Int(Rnd() * Me.Height) + 1
End Sub |
Neste evento estaremos gerando aleatoriamente valores para algumas variáveis que afetam a cor e o tamanho das figuras que iremos desenhar.
A função Rnd retorna um número aleatório entre 0 e .99999 . Vamos supor que você queira gerar números aleatórios entre 1 e 15 , então você faria assim : Int(Rnd() * 15) + 1
Entendeu porquê ? Veja a explicação :
- Rnd() * 15
Randomize inicia o gerador de números aleatórios. Sua sintaxe é : Randomize [ number ]
Randomize use number para iniciar o gerador de números aleatórios da função Rnd dando a ela uma novo valor de semente. Se você omitir number o valor retornado pelo temporizador do sistema será usado como nova semente.
Se você não usar Randomize a função Rnd usará o mesmo número para a semente a primeira vez que for chamada e depois disto usará o último número gerado como valor da semente.
Antes de partir para o código que irá desenhar as figuras vamos declarar na seção General Declarations as constantes que iremos usar para cada figura:
'Cria uma constante com um valor único para cada figura
Const QUADRADO As Integer = 1Const CIRCULO As Integer = 2
Const RETANGULO As Integer = 3
Const ELIPSE As Integer = 4
'representa a seleção do usuário
Dim iDesenhaFigura As Integer = QUADRADO
Nesta parte do código irei usar a variável g declarada como referência ao objeto Graphics no evento Tick do timer.
Usando a variável que é uma referência ao objeto Graphics teremos acesso a muitos métodos de desenho . Alguns deles são :
Conforme a seleção do usuário iremos desenhar uma figura. Para isto iremos usar o código abaixo , ele deve ser incluido na continuação do código já incluído no evento Tick do Timer.
Select
Case
iDesenhaFigura
Case QUADRADO g.DrawRectangle(PenaDesenho, iX, iY, iSize, iSize) Case RETANGULO iRectWidth = iSize / 2 g.DrawRectangle(PenaDesenho, iX, iY, iRectWidth, iSize) Case CIRCULO g.DrawEllipse(PenaDesenho, iX, iY, iSize, iSize) Case ELIPSE iRectWidth = iSize / 3 g.DrawEllipse(PenaDesenho, iX, iY, iRectWidth, iSize) End Select |
Estamos usando uma instância (PenaDesenho) da classe Pen como primeiro parâmetro para realizar o desenho. Esta instância foi criada no evento Tick do controle Timer. O objeto Pen determina a cor e espessura das linhas que serão desenhadas. (
g.DrawRectangle(DrawPen, iX, iY, iSize, iSize)O segundo e o terceiro parâmetor passado para os métodos de desenho determinam a localização X e Y no formulário onde a figura sera desenhada.(
g.DrawRectangle(DrawPen, iX, iY, iSize, iSize)Os outros dois parâmetros determina a largura e altura da figura.
(g.DrawRectangle(DrawPen, iX, iY, iSize, iSize)Como muitos dos métodos de desenho são Sobrecarregados , os parâmetros passados podem ser formatados de diferentes formas. Assim , no código abaixo estamos usando apenas dois parâmetros : Pen e Retangulo:
Dim MyRect As New Rectangle()
MyRect.X = iX
MyRect.Y = iY
MyRect.Width = iSize
MyRect.Height = iSize
g.DrawRectangle(DrawPen, MyRect)
Antes de poder testar o aplicativo devemos atribuir o código as opções do Menu para que as figuras possam ser selecionadas e desenhas. O código é dado a seguir para as quatro opções de figuras:
Private Sub mnuQuadrados_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuQuadrados.ClickIf mnuQuadrados.Checked <> True Then mnuQuadrados.Checked = TruemnuCirculos.Checked = FalsemnuElipses.Checked = FalsemnuRetangulos.Checked = FalseiDesenhaFigura = QUADRADO End If End SubPrivate Sub mnuRetangulos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuRetangulos.ClickIf mnuRetangulos.Checked <> True Then mnuRetangulos.Checked = TruemnuCirculos.Checked = FalsemnuElipses.Checked = FalsemnuQuadrados.Checked = FalseiDesenhaFigura = RETANGULO End If End SubPrivate Sub mnuCirculos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCirculos.ClickIf mnuCirculos.Checked <> True Then mnuCirculos.Checked = TruemnuRetangulos.Checked = FalsemnuElipses.Checked = FalsemnuQuadrados.Checked = FalseiDesenhaFigura = CIRCULO End If End SubPrivate Sub mnuElipses_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuElipses.ClickIf mnuElipses.Checked <> True Then mnuElipses.Checked = TruemnuRetangulos.Checked = FalsemnuCirculos.Checked = FalsemnuQuadrados.Checked = FalseiDesenhaFigura = ELIPSE End If End Sub |
Finalmente o código que deve ser associado ao evento Click do menu Executar. O usuário deve selecionar uma figura e clicar no item Executar onde o código a seguir será executado iniciando o processo. Para iniciar o desenho de outra figura o usuário deverá clicar na opção parar , ir no item Figuras e selecionar a figura que deseja desenhar:
Private
Sub
mnuExcutarParar_Click(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles
mnuExecutarParar.Click
If mnuExecutarParar.Text = "&Executar" Then 'muda o texto do menu mnuExecutarParar.Text = "&Parar" 'ativa o timer Timer1.Enabled = True Else'muda o texto do menu mnuExecutarParar.Text = "&Executar" 'desativa o timer Timer1.Enabled = False End If End Sub |
Agora execute o projeto e veja o resultado:
Ah !!! esqueci do código para limpar o formulário. No evento Click do menu Limpar apenas declare:
Me.Refresh
Para sair declare no evento Click do menu Sair : Me.close
Por hoje é só , aguarde mais artigos VB.NET...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?
|
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET