Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Problemas com Gráfico (DBChart)


Eduardo - São Paulo

Pergunta

Boa tarde a todos, estou com um problema na geração de gráficos utilizando o DBChart (em DELPHI 7). Após quebrar muito a cabeça e várias pesquisas, consegui executar meu gráfico no TIPO BARRAS, este esta funcionando perfeitamente, mas quando fui tentar utilizar os mesmos princípios para a geração do gráfico TIPO PIZZA (TPIESERIES), ocorreu alguns problemas:

1º) A legenda apareçe apenas os nomes e a cor de cada cliente selecionado não aparece.

2º) Não consigo fazer mostrar o nome, a cor e o valor quando passa o mouse, coisa que no gráfico de barras já fiz.

Alguém poderia me dar um auxílio..

Abaixo segue o código de como estou realizando este processo.

Gráfico em BARRAS - esta OK

If Qry1.RecordCount <> 0 Then

Begin

// Variável para a Cor

iCor:= 0;

Qry1.Active:= True;

Qry1.First;

For iFor1:= 0 To Qry1.RecordCount -1 Do

Begin

// ComboBox onde determino que tipo período

Case CbSem.ItemIndex Of

0,1,2: Begin

// Atribui a data a uma variável

sDat:= Qry1.FieldByName('Dia').AsString;

End;

3: Begin

// Atribui a data a uma variável

sDat:= Qry1.FieldByName('MesAno').AsString;

End;

End;

// RadioGroup que determina o tipo de Valor para mostrar

Case RgOrd.ItemIndex Of

0: Begin

dValor:= Qry1.FieldByName('Qtd').AsFloat;

End;

1: Begin

dValor:= Qry1.FieldByName('Total').AsFloat;

End;

2: Begin

dValor:= Qry1.FieldByName('Comissao').AsFloat;

End;

End;

// Cria a série do Gráfico tipo BARRA

Grafico.AddSeries(TBarSeries.Create(Self));

// Busca a COR na função de cores

iCor:= fGraCor(iNum);

// Atribui a Cor na variável STRING

sCor:= ColorToString(iCor);

// Determina a COR

Grafico.Series[iFor1].SeriesColor:= StringToColor(sCor);

// Coloca o nome da série com o nome do CLIENTE

Grafico.Series[iFor1].AddY(dValor, sDat, iCor);

// Diz que o ítem a ser mostrado será o VALOR

Grafico.Series[iFor1].Marks.Style:= smsValue;

// Coloca o nome da série com o nome do CLIENTE

Grafico.Series[iFor1].Title:= Qry1.FieldByName('Nome').AsString;

// Atribui o Nome do CLIENTE a variável

sNom:= Qry1.FieldByName('Nome').AsString;

GraLeg(iNum);

iNum := iNum + 1;

iSer0:= iSer0 + 1;

Qry1.Next;

End;

//***** Legenda *****\\

For iFor1:= 0 To Grafico.SeriesCount - 1 Do

Begin

GraSer(iFor1);

End;

End;

Gráfico em PIZZA - (COM PROBLEMAS)

If Qry1.RecordCount <> 0 Then

Begin

// Variável para a Cor

iCor:= 0;

Qry1.Active:= True;

Qry1.First;

For iFor1:= 0 To Qry1.RecordCount -1 Do

Begin

// ComboBox onde determino que tipo período

Case CbSem.ItemIndex Of

0,1,2: Begin

// Atribui a data a uma variável

sDat:= Qry1.FieldByName('Dia').AsString;

End;

3: Begin

// Atribui a data a uma variável

sDat:= Qry1.FieldByName('MesAno').AsString;

End;

End;

// RadioGroup que determina o tipo de Valor para mostrar

Case RgOrd.ItemIndex Of

0: Begin

dValor:= Qry1.FieldByName('Qtd').AsFloat;

End;

1: Begin

dValor:= Qry1.FieldByName('Total').AsFloat;

End;

2: Begin

dValor:= Qry1.FieldByName('Comissao').AsFloat;

End;

End;

// Cria a série do Gráfico tipo PIZZA

Grafico.AddSeries(TPieSeries.Create(Self));

// Busca a COR

iCor:= fGraCor(iNum);

// Atribui a Cor na variável STRING

sCor:= ColorToString(iCor);

// Determina a COR

Grafico.Series[0].SeriesColor:= StringToColor(sCor);

// Coloca o nome da série com o nome do CLIENTE

Grafico.Series[0].Add(dValor, sDat, iCor);

// Diz que o ítem a ser mostrado será o VALOR

Grafico.Series[0].Marks.Style:= smsValue;

// Coloca o nome da série com o nome do CLIENTE

Grafico.Series[0].Title:= Qry1.FieldByName('Nome').AsString;

// Coloca o nome da série com o nome do CLIENTE

Grafico.Series[0].LegendItemColor(iCor);

// Atribui o Nome do CLIENTE a variável

sNom:= Qry1.FieldByName('Nome').AsString;

GraLeg(iNum);

iNum := iNum + 1;

iSer0:= iSer0 + 1;

Qry1.Next;

End;

//***** Legenda *****\\

For iFor1:= 0 To Grafico.SeriesCount - 1 Do

Begin

GraSer(iFor1);

End;

End;

A legenda esta feita da seguinte forma

procedure EstLeg(Sender: TObject; Shift: TShiftState; X,Y: Integer);

Var

t: Longint;

procedure HitSeries(ASeries:TChartSeries);

Var

tmp: Longint;

iCor: Integer;

begin

tmp:= ASeries.Clicked(x,y);

If tmp <> -1 Then

Begin

Case FrmGesRelProPacRea.RgOrd.ItemIndex Of

0: LblVal.Caption:= FloatToStr(ASeries.GetMarkValue(tmp));

1: LblVal.Caption:= FormatFloat('R$ #,##0.00', ASeries.GetMarkValue(tmp));

2: LblVal.Caption:= FormatFloat('R$ #,##0.00', ASeries.GetMarkValue(tmp));

End;

ShCor.Brush.Color:= ASeries.ValueColor[tmp];

iCor:= fGraHin(ASeries.ValueColor[tmp]);

LblDat.Caption:= Grafico.Series[0].Title;

end;

begin

LblDat.Caption:= '';

LblVal.Caption:= '';

For t:=0 To Grafico.SeriesCount-1 Do

Begin

HitSeries(Grafico.Series[t]);

End;

LblDat.Visible:= LblDat.Caption <> '';

LblVal.Visible:= LblVal.Caption <> '';

If (LblVal.Caption <> '') = True Then

Begin

ShCor.Visible:= True;

End

Else

Begin

ShCor.Visible:= False;

End;

end;

Editado por Eduardo - São Paulo
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
voce já viu o exemplo do proprio delphi ?

o TeeChart esta na pasta demos

abraço

Jhonas, já fiz isso sim... conforme pode verificar em meu código...

O exemplo do próprio delphi é para resoluções digamos simples... são gráficos já prontos que utilizam na maioria acessos randômicos.

Postei aqui minha dúvida pois realmente já fiz muitas buscas.

Desenvolvi todo meu gráfico de Barras do ZERO, utilizo até 15 Querys em determinados resultados, mostrando filtragens por dia, semana, quinzenal ou mensal.

Há um formulário que você determina este ítem como tb o grupo de clientes, outro se é apenas um único cliente, vários clientes, ou todos clientes, se você quer ver o resultado de todos selecionados ou apenas os TOP mais, neste caso você seleciona a qtd de TOP mais... ou seja esta muito funcionando perfeito o gráfico em BARRAS...

O problema é fazer isso no gráfico de PIZZA, quando a geração será feita comparando um com o outro... neste gráfico o meu problema como falei é que após criar-lo, o que faço e dá certo, as legendas esta aparecendo sem a cor respectiva ou seja só aparece na legenda o nome do cliente, e tenho um ítem no gráfico em Barras que utilizo para legenda que é composto de um SHAPE onde mostra a cor do gráfico, um label que mostra o nome do cliente e outro que mostra o valor, no gráfico de pizza não estou conseguindo fazer aparecer corretamente, a cor no shape não aparece seguindo onde o mouse esta, os nomes e valores tb não....

Atenciosamente

Eduardo

Link para o comentário
Compartilhar em outros sites

  • 0

exemplo:

ADOQuery1.Close;
DBChart1.Legend.Visible:=False;
with DBChart1.SeriesList.Series[0] do begin
 DataSource := ADOQuery1;
 XLabelsSource := ADOQuery1Company.FieldName;
 XValues.ValueSource := ADOQuery1SumItems.FieldName;
 YValues.ValueSource := '';
 Marks.Style := smsXValue;
 CheckDataSource;
end;

with DBChart1.SeriesList.Series[1] do begin
 DataSource := ADOQuery1;
 XLabelsSource := '';
 XValues.ValueSource := ADOQuery1NumOrders.FieldName;
 YValues.ValueSource := '';
 CheckDataSource;
end; 

ADOQuery1.Open;

ou pesquise na net por:

Charting with Databases delphi

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas o código que você postou, foi retirado do seguinte endereço http://delphi.about.com/od/usedbvcl/l/aa082101a.htm, e você não deve ter se atentado ao detalhe de que neste exemplo, o gráfico é feito em tipo BARRAS, e não PIZZA, que ele não tem legendas, e tb não utiliza a legenda com o movimento do mouse, exatamente os ítens que desejo e preciso resolver. Montar o gráfico como no exemplo esta feito. As dúvidas não consiste em montar mas sim no que esta errado em não aparecer a "COR" na legenda e como fazer para mostrar com o mouse ....

Mesmo assim obrigado por tentar

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...