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
Question
Eduardo - São Paulo
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 PauloLink to comment
Share on other sites
6 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.