Criação de gráficos com dbChart
Crie gráficos para suas aplicações, com esse artigo de Bruno Lichot.
Você não gostou da qualidade deste conteúdo?
(opcional) Você gostaria de comentar o que não lhe agradou?
Passo a Passo
Fala galera!
Após um tempinho de herdwork e out of time, estamos de volta. E esta semana vamos abordar um assunto interessante: a criação de gráficos.
Mas, antes de começarmos, gostaria de agradescer a todos que tem me enviado e-mails e contribuido para o aprimoramento da nossa coluna. Estou muito satisfeito de ajudar e ser ajudado, satisfeito por que este veículo de comunicação tem levado informações relevantes a todas as pessoas que dele usufruem. Lembrem sempre: "O Caminho do crescimento é a humildade e a carência do saber, mas a soberba precede a queda"(Jesus Cristo).
Continuem escrevendo e espero estar ajudando com mais este artigo. Fiquem de olho no próximo ClubeDelphi TechDay! Aí galera do Sul, vamos nos encontrar em breve!
Gráficos: Ferramenta de Análise e Tomada de Decisão
A utilização de representação gráfica para demonstração de situações, acontecimentos, para ensinar, entre outras aplicações, tem se perdurado desde os tempos remotos da humanidade. Hoje com os sistemas de informação baseado em softwares e banco de dados, a consolidação destas informações são de extrema necessidade para, principalmente, projetar os dados de forma inteligível a ponto de se tornarem uma informação relevante. Esta técnica é muito utilizada para embasar tomada de decisão, projeção financeira, crescimento, mentas e motivação.
Desta forma, faremos construção de um gráfico que demonstre a projeção de venda dos produtos de nosso sistema num período determinado de tempo.
Criando Gráficos
Adicione um novo formulário ao projeto, defina sua propriedade Name como FrmGrafico salve sua unidade como UGrafico e defina sua interface como demonstrado abaixo. O nome dos componentes DateTimePickers será DtpInicial e DtpFinal. O nome do edit será EdtValor.
Adicione ao FrmGrafico um objeto DBChart da palheta DataControls de forma que preencha o restante do formulário. Defina a propriedade WindowState do FrmGrafico como wsMaximized.
Adicione um SqlDataSet para nele criarmos a projeção de dados que fornecerá os valores para criação do gráfico de projeção de vendas por período. Defina suas propriedades como demonstrado a seguir.
Observação: Estou utilizando três tabelas: Pedidos, Itens e Produtos para montar a minha projeção de exemplo. O leitor pode optar por outra projeção.
Name: SqlGrafico
SqlConnection: SqlConnection
CommandText:
SELECT PRODUTOS.DESCRICAO
,SUM(ITENS.PRECO * ITENS.QUANTIDADE) AS TOTAL
FROM PEDIDOS
,ITENS
,PRODUTOS
WHERE PEDIDOS.DATA BETWEEN :DATA1 AND :DATA2
AND PEDIDOS.ID_PEDIDO = ITENS.ID_PEDIDO
AND ITENS.ID_PRODUTO = PRODUTOS.ID_PRODUTO
GROUP BY PRODUTOS.DESCRICAO
HAVING SUM(ITENS.PRECO * ITENS.QUANTIDADE) > :VALOR
ORDER BY PRODUTOS.DESCRICAO
Params: DATA1 e DATA2 – DataType = ftDate
VALOR – DataType = ftFloat
Observação: Este DataSet fornece a projeção de produtos vendidos dentro de um determinado período. Período este, fornecido pelo usuário definido pelos parâmetros DATA1 e DATA2, bem como a restrição de valor total de venda no período definido no parâmetro VALOR.
O componente DBChart não está habilitado a trabalhar com dados provenientes de um DataSet unidirecional como o SqlGrafico. Neste caso adicionaremos um DataSetProvider e um ClientDataset para solucionar esta questão. Adicione os componentes e siga as configurações a seguir.
Tipo: DataSetProvider
Name: DspGrafico
DataSet: SqlGrafico
Tipo: ClientDataset
Name: CdsGrafico
ProviderName: DspGrafico
Observação: Este DataSet fornecerá os dados obtidos no SqlGrafico para o DBChart. Clique com o botão esquerdo do mouse sobre o CdsGrafico e selecione a opção Fetch Params com o objetivo de adicionar os parâmetros do DataSet de origem e adicione seus campos como objeto, aplicando um duplo clique sobre o CdsGrafico e em seguida Ctrl+F.
No FrmGrafico selecione o DBChart e aplique um duplo clique sobre ele para fazermos as suas configurações.
Abrirá um wizard para auxiliar a configuração do DBGrid.
Nesta aba Series, definiremos o tipo de gráfico a ser gerado, clique no botão Add.. e selecione o tipo de gráfico Pie.

Abra a aba Titles e defina no textarea o título do gráfico. Nesta etapa podem ser definidas as configurações relacionadas ao título do gráfico como posicionamento, cores e fontes relacionadas e ambiente.
Na aba Panel estão as configurações de fundo do gráfico como o preenchimento gradiente. Veja a figura abaixo:
Na aba 3D estão as configurações relacionadas ao gráfico como distância, posicionamento, profundidade, etc.
Abra a aba Series superior e em seguida a sub-aba Marks e no grupo Style selecione Label and Percent.
Abra a aba Data Source, nesta aba vamos configurar a fonte de dados para a geração do gráfico. Defina no combobox a fonte como DataSet no combobox DataSet defina o CdsGrafico, no Label defina DESCRICAO e no Pie defina TOTAL.
Façamos agora os eventos do formulário.

Evento OnClick do botão Gráfico
procedure TFrmGrafico.BitBtn1Click(Sender: TObject);
begin
Screen.Cursor := crHourGlass;
CdsGrafico.Close;
CdsGrafico.Params[0].AsDate := DtpInicial.Date;
CdsGrafico.Params[1].AsDate := DtpFinal.Date;
CdsGrafico.Params[2].AsFloat := StrToFloat(EdtValor.Text);
CdsGrafico.Open;
Screen.Cursor := crDefault;
end;
Neste procedimento modificamos o cursor do mouse para o caso da consulta aos dados demorar, o usuário tenha a impressão de que existe algo em processamento e não pense que o programa parou de executar, na seqüência passamos os parâmetros da consulta e definimos o cursor do mouse novamente como o padrão. Evento OnClick do botão Fechar
procedure TFrmGrafico.BitBtn2Click(Sender: TObject);
begin
Close;
end
Evento OnClose do FrmGrafico
procedure TFrmGrafico.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CdsGrafico.Close;
end;
Evento OnShow do FrmGrafico
procedure TFrmGrafico.FormShow(Sender: TObject);
begin
DtpInicial.Date := Date - 30;
DtpFinal.Date := Date + 40;
end;
Pronto pessoal, agora basta colocar em prática! Até a próxima! Compartilhando para Conquistar
Bruno Lichot
System Engineer da Borland/MicroFocus, especialista em desenvolvimento de aplicações de missão critica, multicamadas, web services, de alta disponibilidade, interfaces web e distribuição geográfica. É Consultor Técnico para a linha da Embarcadero. Atua na implementação e consultoria de Projetos Ágei...
2 COMENTÁRIOS
Abraço.



