Criando Gráficos no VB 5.0 com o MSChart.
Introdução.
Para construir gráficos em sua aplicação você pode usar o Crystal Reports, o Excel via automação OLE ou o controle gráfico do VB , o MSChart. O MSChart permite apresentar seus dados em forma de gráfico como uma planilha do Excel(linhas e colunas); gráficos tridimensionais, gráficos de torta, barra, pizza, etc. Antes de iniciar você deve adicionar o controle Microsoft Chart Control ao seu projeto da seguinte maneira:
- Selecione a opção Components do menu Project, selecione o controle Microsoft Chart Control e clique em OK e adicione o controle ao seu formulário.
A figura 1.0 abaixo mostra a barra de ferramentas e a configuração inicial do MSChart:
fig 1.0 - Barra de Ferramentas
fig 2.0 - MSChart no Formulário - Configuração Inicial
Agora basta definir a fonte de dados que alimentará o gráfico , geralmente uma tabela , e fazer a configuração do Controle MSChart. Para abrir um diálogo de propriedades do controle, clique com o botão direito do mouse sobre o mesmo, selecione a opção Properties e a janela para configuração surge como mostrada na figura 2.0 abaixo:
fig.3.0 - Pág. de Propriedades do MSChartCada aba permite configurar diversas propriedades utilizadas na confecção de um gráfico. O MSChart não é lá aquela maravilha , mas consegue resolver , eu diria uns 70% dos problemas relacionados a confecção de gráficos no Visual Basic. ConteúdoUtilização e configuração.
Vejamos agora as propriedades do MSChart e de como configurá-lo.
Fig 4.0
A configuração inicial do controle gráfico apresenta uma série de quatro barras em cinco colunas com legendas R1 a R5. Esta sequência de dados é definida pela propriedade RowCount. A quantidade de colunas é definida pela propriedade ColumnCount. Na figura acima alteramos RowCount para 2 e ColumnCount também para 2 e ainda definimos a propriedade RowLabel para cada coluna e a propriedade ShowLegend para True.
A propriedade ChartType permite obter os seguintes tipos de gráficos :
- Barra - Valores de 0 e 1
- Linha - Valores de 2 e 3
- Áreas - Valores 4, 5 , 6 e 7
- Combinação - Valores 8 e 9
- Torta - Valor 14
- XY - Valor 16
Aba Chart
- Chart Type - Permite escolhar o tipo de gráfico usado
- Chart Options
- Show Legend - Mostra a legenda no gráfico
- Show Markers - Marcas sobre cada coluna do gráfico
- Stack Series - Empilhar as colunas
- Series em rows - Inverte apresentação , colunas em linhas
Aba Axis e Axis Grid
- Existem diversas propriedades que permitem configurar os eixos de um gráfico como:
- Espessura e cor de linhas
- Definição da escala - Valor Máximo e Mínimo
- Divisão da Escala - Valor Maior e Menor
Aba Series e Series Color
- Permitem configurar diversas propriedades relacionadas ás séries do gráfico e a cor interior e da borda de cada série
Aba BackDrop
- Configura os elementos de fundo e da borda do gráfico. O elemento a ser configurado é selecionado na lista Property Name
Aba Text
- Através da lista Property Name podemos selecionar o título, o rodapé, títulos dos eixos X, Y ou de um segmento eixo Y e definir um nome para cada item , inclusive definindo o alinhamento e a orientação do texto através do grupo Alignment e Orientation.
Aba Fonts
- Permite definir a fonte, estilo, tamanho e efeitos de cor.
Além destas propriedades temos as seguintes:
- Row - especifica a linha corrente
- RowCount - Determina o número de sequência de dados
- RowLabel - define o rótulo de dados da linha corrente
- Data - Permite a leitura e a atribuição dos valores de dados ao gráfico
- Column - Define a coluna ativa.
- ColumnCount - Define o número de colunas ativas
- ColumnLabel - Define a legenda para a coluna ativa
- BorderStyle - Define a borda do gráfico
- ChartData - Permite atribuir valores ás sequências de dados a partir de uma matriz (array) de duas dimensões.
Exemplos de Utilização do MsChart
Vejamos dois exemplos de utilizando o MSChart:
- Vamos construir um gráfico cujo objetivo é mostrar a evolução das receitas e despesas mensais. Nosso gráfico deverá ter as seguinte configuração:
- Título do Gráfico - Receitas e Despesas - Ano 1998
- Titulo do Eixo X - Meses
- Título do Eixo Y - Reais - R$
- Sequências de Dados - Duas sequências : Receitas e Despesas
- Mostrar Legendas - Azul para Receitas e Vermelha para despesas
- O gráfico deverá ter borda com sombra.
- Número de linhas de sequências de dados - Três , representando os meses : Agosto, Setembro e Outubro.
O jeitão do gráfico depois de pronto deverá ser o da figura 5.0 figura 5.0
Agora vamos por a mão na massa e montar o gráfico . Iremos fazer isto em tempo de projeto.
- Inicie um novo projeto no Visual Basic.Grave o formulário Form1 como Grafico
- Selecione no Menu Project a opção Components e marque Microsoft Chart Control
- No menu View opção ToolBox insira o controle OCX ( ver fig 1.0) no seu formulário.
- Ative a janela de configuração de propriedades ( ver figura 2.0), na aba Text , Property Name Title em Text digite o título do gráfico - Receitas e Despesas - Ano 1998, selecione alinhamento centralizado e orientação de texto na vertical
- Como no passo anterior selecione na Aba Text em Property Name selecione X axis Title e em Text informe - Meses com alinhamento centralizado e orientação vertical
- Ainda como no passo anterior selecione a aba Text em Property Name selecione Y axis Ttile e em Text informe - Reais - R$ , com alinhamento centalizado e orientação na horizontal
- Define a propriedade ShowLegend para True
- Defina Colcount igual a 2 , pois teremos duas séries , Receitas e Despesas
- Defina RowCount igual a 3 , pois teremos 3 sequências de dados - Agosto, Setembro e Outubro
- Agora faça Column igual a 1 e Row igual a 1 . Isto define que iremos tratar a primeira sequência de dados e a primeira série que será a receita:
- Defina RowLabel como Agosto
- Informe na propriedade ColumnLabel - Receita
- Informe na propriedade Data o valor de 40
- Mantendo Row igual a 1 faça Column igual a 2 . Pois iremos tratar a série Despesa
- Informe na propriedade ColumnLabel - Despesa
- Informe na propriedade Data o valor de 50
- Agora faça Column igual a 1 e Row igual a 2
- Defina RowLabel como Setembro
- Informe na propriedade Data o valor de 50
- Mantendo Row igual a 2 faça Column igual a 2 .
- Informe na propriedade Data o valor de 26
- Agora faça Column igual a 1 e Row igual a 3.
- Defina RowLabel como Outubro
- Informe na propriedade Data o valor de 95
- Mantendo Row igual a 3 faça Column igual a 2 .
- Informe na propriedade Data o valor de 26
- Na aba Axis selecione Y Axis e em Axis Scale desative Automatic Scaling, definindo a seguir :
- Minimum -> 0
- Maximum -> 100
- Major divisions -> 10
- Minor divisions -> 1
- Na aba Series Color defina a series Receita com a cor Azul e Despesa com a cor Vermelha
- Na aba BackDrop , Property Name -> Title , define a cor do título e em Border-> Style defina como Single line , Width igual a 1 pt e color como verde
Bem , acho que com isso terminamos o gráfico, agora basta executar o projeto.
Projeto - Alunos
A esta altura voce deve estar pensando - "... pô se toda vez que eu tiver que fazer um gráfico tiver que usar este processo trabalhoso eu desisto. ! ", e você esta certo não tem cabimento , mas existe uma maneira bem mais fácil de fazer isto. Que tal alimentar os dados do seu gráfico diretamente de seus arquivos de dados ?
Vamos mostrar a seguir um projeto simples que indica como fazer isto. Iremos criar um gráfico com os dados existentes em nossa tabela tblalunos para obter um gráfico que indique o número de alunos matriculados por série.
Para facilitar criamos uma consulta que calcula a quantidade de alunos por série e a armazenamos no banco de dados com o nome de SEL_ SERIE , a instrução SQL da consulta é a seguinte:
SELECT DISTINCTROW TBLALUNOS.SERIE, Count(TBLALUNOS.CODALUNO) AS ALUNOS
FROM TBLALUNOS
GROUP BY TBLALUNOS.SERIE;
O código do projeto é dado abaixo:
Private Sub Form_Load()
Set db = DBEngine.Workspaces(0).OpenDatabase("d:\escola\escola.mdb")
End Sub
Option Explicit
Dim db As Database
Dim rs As Recordset
Dim qry As QueryDef
Dim reg As Integer
Dim i As Integer
Private Sub grafico_Click()
'O objeto Mschart foi chamado de graf1
Set qry = db.QueryDefs("sel_series")
Set rs = qry.OpenRecordset
rs.MoveLast
rs.MoveFirst
reg = rs.RecordCount
graf1.chartType = 1 'barra em duas dimensões
graf1.ShowLegend = False 'não mostra legenda
graf1.Title = "Relação de Alunos por Turma" 'titulo do gráfico
graf1.ColumnCount = 1 'uma série
graf1.RowCount = reg 'número sequencia de dados
graf1.Visible = True
While Not rs.EOF()
For i = 1 To reg
graf1.Row = i
graf1.RowLabel = rs("SERIE") & " Série "
graf1.Data = rs("alunos")
rs.MoveNext
Next
Wend
End Sub
O gráfico obtido esta exposto abaixo:
Bem , deu para perceber que se quisermos algo mais requintado teremos que usar produtos de terceiros pois o Mschart deixa a desejar mas eu diria que para coisas simples dá pra quebrar o galho.
Ah! ia esquecendo , como imprimir o gráfico ??? Insira o controle Picture no seu formulário e deixa-o invisível, e seguir insira um botão de comando com o nome de imprimir e acrescente o seguinte código a ele:
Private Sub Command2_Click()
graf1.EditCopy
Picture1.Picture = Clipboard.GetData()
Printer.PaintPicture Picture1.Picture, 0, 0
Printer.EndDoc
Picture1.Picture = LoadPicture()End Sub
Arrivederci !!!
Conteúdo