在DBChart中,如何才能在程序中改变图表的类型,如可按Line、Bar等自由选择
方式显示。谢谢!

解决方案 »

  1.   

    var  
      bar: TbarSeries;
      pie: TpieSeries;
    begin
    //柱形图 
      Title.Text.Clear;
       Title.Text.Add('表名称');            
       bar := TbarSeries.Create(nil);
       bar.Clear;
       bar.ParentChart := DBChart1; 
       bar.add(123,'name');
    //饼图
      if DBchart1.SeriesCount > 0 then
        DBchart1.Series[0].Free;//如果表中有图型将先FREE
      
       Title.Text.Clear;
       Title.Text.Add('表名称');            
       pie := TbarSeries.Create(nil);
       pie.Clear;
       pie.ParentChart := DBChart1; 
       pie.add(123,'name');
    end;
      

  2.   

    先做出相应图标的Series,再加其入TChart:
    1.
    procedure TfrmMain.DrawChart(aIndex: Integer; aShow3D: Boolean);
    var
      tSeries: TChartSeries;
      i: Integer;
    begin
      chtFir.Series[0].Clear;
      tSeries := chtFir.Series[0];  case aIndex of   //以下方法若不事先建好tSeries则执行不成功 因其用var传入
        0: ChangeSeriesType(tSeries, TLineSeries);
        1: ChangeSeriesType(tSeries, THorizBarSeries);
        2: ChangeSeriesType(tSeries, TBarSeries);
        3: ChangeSeriesType(tSeries, TPieSeries);
      end;  if aIndex = 3 then
        tSeries.Marks.Style := smsLabelPercent
      else
        tSeries.Marks.Style := smsValue;  aqChart.First;
      for i := 0 to aqChart.RecordCount - 1 do
      begin
        tSeries.Add(aqChart.FieldByName('scount').AsFloat, aqChart.FieldByName('sname').AsString);
        aqChart.Next;
      end;
      chtFir.View3D := aShow3D;
      chtFir.AddSeries(tSeries); 
    end;2.{推荐}
    procedure TfrmMain.DrawChart(aIndex: Integer; aShow3D: Boolean);
    var
      tSeries: TChartSeries;
      i: Integer;
    begin
      tSeries := nil;
      for i := 0 to chtFir.SeriesCount - 1 do
        chtFir.Series[i].Free;  case aIndex of
        0: tSeries := TLineSeries.Create(self);
        1: tSeries := THorizBarSeries.Create(self);
        2: tSeries := TBarSeries.Create(self);
        3: tSeries := TPieSeries.Create(self);
      end;  tSeries.Marks.Style := smsValue;
      if aIndex = 3 then tSeries.Marks.Style := smsLabelPercent;  tSeries.ColorEachPoint := true;
      aqChart.First;
      for i := 0 to aqChart.RecordCount - 1 do
      begin
        tSeries.Add(aqChart.FieldByName('scount').AsFloat, aqChart.FieldByName('sname').AsString);
        aqChart.Next;
      end;  chtFir.View3D := aShow3D;
      chtFir.AddSeries(tSeries);
    end;3.调用方法:
    procedure TfrmMain.bbtnFaceClick(Sender: TObject);
    var
      frmSet: TfrmSet;
    begin
      frmSet := TfrmSet.Create(self);
      with frmSet do
        if ShowModal = mrOk then
          self.DrawChart(rgFace.ItemIndex, cbShow3D.Checked);
      FreeAndNil(frmSet);
    end;