VB.NET - Criando gráficos de barras simples


Podemos criar gráficos com o VB.NET de diversas maneiras. A mais fácil , e mais cara , é usar um componente pronto de terceiros , que geralmente tem um custo. Se você não quer gastar dinheiro com um componente deve tratar de criar você mesmo os seus gráficos. Isto é possível via código usando o System.Drawing e a API GDI+.

A GDI+ é a versão melhorada da GDI - Graphic Device Interface - e fornece funções de alto nível para tratamento de imagens e gráficos.

Neste artigo eu vou ser essencialmente prático , não vou entrar em detalhes sobre a GDI+ , vou apenas mostrar como podemos criar de forma simples um gráfico de barras estático para que você possa ter uma noção de como usar este recurso em sua aplicação VB.NET. Em um outro artigo irei falar de como gerar gráficos dinâmicos usando informações de um banco de dados.

Para criar um gráfico de barras bem simples no VB.NET via código temos que usar uma fórmula matemática para dimensionar corretamente o tamanho das barras. A fórmula pode ser expressa no Visual Basic assim :

valorIntervalor = ( intervaloMaximo - intervaloMinimo ) * ((valor - valorMinimo) / valorMaximo - valoMinimo)) + intervaloMinimo

Esta fórmula será usada para dimensionar as barras de forma correta. Vamos então ao código:

- Começamos declarando algumas variáveis :

Dim intIndex1 As Integer

Dim lblBar() As Label

Dim lngMax As Long

Dim lngMin As Long

Dim dblValores(10) As Double

Dim lngLargura As Long

Dim dblX As Double


a variável dblValores(10) é um array de 10 posições com índice inicial igual a zero e final igual a nove e nele iremos armazenar os valores do nosso gráfico. Isto é necessário pois estou criando um gráfico estático.

 

A seguir nas linhas de código estou criando uma instância da estrutura Point e da estrutura Size.
 

Dim objPosicao As New Point(16, 16)                 

Dim objTamanho As New Size(Size.Width - 32, 16)

 

A estrutura Size representa o tamanho de uma região retangular com um par ordenado de largura e altura.

A estrutura Point representa um par ordenado inteiro de coordenadas x e y que define um ponto bidimensional.

 

Na sequência do código temos :

 

ReDim lblBar(9)

 

For intIndex1 = 0 To 9


   lblBar(intIndex1) =
New Label()


   With
lblBar(intIndex1)

     .Location = objPosicao

     .BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D

     .BackColor = Color.Red

     .Size = objTamanho

     .Refresh()

   End With


 Controls.Add(lblBar(intIndex1))

 objPosicao.Y += 16


Next
intIndex1

 

dblValores(0) = 10

dblValores(1) = 16

dblValores(2) = 12

dblValores(3) = 5

dblValores(4) = 25

dblValores(5) = 40

dblValores(6) = 50

dblValores(7) = 40

dblValores(8) = 35

dblValores(9) = 60

dblValores(10) = -1

 

Estou criando um controle chamado lblBar que será usado para montar o gráfico e no formulário. Ele é do tipo Label e cada item tem suas propriedades definidas no laço For/Next.

A seguir estou atribuindo valores fictícios a cada indice do array dblValores()  que irão servir para alimentar o gráfico de barras.

- Na continuação do código fazemos a verificação dos valores preparando para montagem do gráfico. Se não for possível criar o gráfico avisamos e saimos da rotina.

For dblX = 1 To 10

   If dblValores(dblX) > lngMax Then

       lngMax = dblValores(dblX)

   End If


   If
dblValores(dblX) < lngMin Then

       lngMin = dblValores(dblX)

    End If

Next dblX
 

If lngMax = lngMin Then

    MsgBox("Não é possível criar o gráfico.")

    Exit Sub

End If

 

lngLargura = lblBar(0).Width

- Finalmente a parte final do código na qual a partir dos valores aplicamos a fórmula e montamos o gráfico exibindo no formulário:

For intIndex1 = 0 To 9

   ' Resolve a formula w/W = (x-min)/(Max-min)

    lblBar(intIndex1).Width = (dblValores(intIndex1) - lngMin) / (lngMax - lngMin) * lngLargura

    lblBar(intIndex1).Visible = True

    lblBar(intIndex1).Refresh()

Next intIndex1

Vamos agora usar o código em um projeto VB.NET.

Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)

  1. Project Types : Visual Basic Projects
  2. Templates : Windows Application
  3. Name : Chart2
  4. Location : c:\vbnet\Chart2

Este código você pode usar como esta ou fazer ajustes para a sua situação. Vou colocá-lo no evento click de um botão de comando de um formulário. Para isto vou criar um projeto do tipo Windows Forms com um botão de comando e algumas labels conforme abaixo:

Executando o projeto teremos :

Não vai dar para você criar aquelas imagens de fractais com este código mas ele pode quebrar o galho e gerar aquele gráfico de barras simples para sua aplicação sem custos adicionais.

Até o próximo artigo VB.NET...


José Carlos Macoratti