Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Problemas com Gráfico (DBChart)


Eduardo - São Paulo

Question

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;

Edited by Eduardo - São Paulo
Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...