使用fastreport4.011,制作出与数据库相联的chart图形,chart包含的图形bar有三个?(fastreport中显示的就是bar,并没有名称的属性?)
偶现在想用语句实现的功能如下
1:获取其chart与bar(chart所包含的bar),获取后,对bar进行图形转换!例如:柱形图换为园形图等等!获取chart已经搞定,可是获取其中的chart所包含的bar应该怎样实现,实在是没有办法了?获取其chart的语句是这样写的,
var
   VChart  :TfrxChartView;
begin
      VChart := TfrxChartView(frxReportConstrue.FindObject('Chart'));
end;

解决方案 »

  1.   

    以前做过一个,给你参考一下:
    procedure TForm_DesignReport.SetChart;
    var
      i: Integer;
      sSeriesType, sFieldName: String;
      pChart: TDBChart;
      sSeries: TChartSeries;  vMemo: TfrMemoView;
      vBand2: TFrBandView;
      myDataSet: TClientDataSet;
      myFrDataSet: TFrDBDataSet;
      myChart: TFrChartView;
    begin
      //寻找报表中是否有特定的Chart
      myChart:=TfrChartView(FRReport.Pages[0].FindObject('myChart'));
      if myChart=nil then Exit;  //寻找报表中是否有特定的Memo, 然后根据Memo对Chart进行设置
      vMemo := TfrMemoView(FRReport.FindObject('SetmyChart'));
      if vMemo=nil then Exit;  //得到主项数据
      vBand2:=TfrBandView(FRReport.Pages[0].FindObject('myPageMasterData_myDataSet'));
      if vBand2=nil then Exit;  //得到主项数据对应的数据集
      myFrDataSet:=(Self.FindComponent(vBand2.DataSet) as TFrDBDataSet);
      if myFrDataSet=nil then Exit;
      myDataSet:=TClientDataSet(myFrDataSet.DataSet);  pChart:=TDBChart.Create(Self);
      try
        pChart.RemoveAllSeries;
        pChart.View3D:=vMemo.Memo.Values['View3D']='1';
        pChart.LeftAxis.Title.Font.Name:='@宋体';
        pChart.LeftAxis.Title.Font.Size:=10;
        pChart.LeftAxis.Title.Angle:=270;
        pChart.LeftAxis.Automatic:=True;    if trim(vMemo.Memo.Values['LeftAxisMax'])<>'-1' then
        begin
          pChart.LeftAxis.Automatic:=False;
          pChart.LeftAxis.AutomaticMaximum:=False;
          pChart.LeftAxis.Maximum:=StrToFloat(trim(vMemo.Memo.Values['LeftAxisMax']));
          //ShowMessage('111"'+vMemo.Memo.Values['LeftAxisMax']+'"'+vMemo.Memo.Values['LeftAxisMin']+'"');
        end;
        if trim(vMemo.Memo.Values['LeftAxisMin'])<>'-1' then
        begin
          //ShowMessage('222"'+vMemo.Memo.Values['LeftAxisMax']+'"'+vMemo.Memo.Values['LeftAxisMin']+'"');
          pChart.LeftAxis.Automatic:=False;
          pChart.LeftAxis.AutomaticMinimum:=False;
          pChart.LeftAxis.Minimum:=StrToFloat(trim(vMemo.Memo.Values['LeftAxisMin']));
        end;
        pChart.LeftAxis.AutomaticMaximum:=trim(vMemo.Memo.Values['LeftAxisMax'])='-1';
        pChart.LeftAxis.AutomaticMinimum:=trim(vMemo.Memo.Values['LeftAxisMin'])='-1';    pChart.LeftAxis.Title.Caption:=vMemo.Memo.Values['YLabel'];
        pChart.BottomAxis.Title.Caption:=vMemo.Memo.Values['XLabel'];    sSeriesType:=vMemo.Memo.Values['Series'];
        for i:=0 to myDataSet.FieldCount - 1 do
        begin
          sFieldName:=myDataSet.Fields[i].FieldName;
          if vMemo.Memo.Values[sFieldName]<>'' then
          begin
            if sSeriesType='Line' then sSeries:=TLineSeries.Create(pChart)
            else if sSeriesType='Bar' then sSeries:=TBarSeries.Create(pChart)
            else if sSeriesType='Pie' then sSeries:=TPieSeries.Create(pChart);
            pChart.AddSeries(sSeries);
            sSeries.DataSource:=myDataSet;
            sSeries.Title:=vMemo.Memo.Values[sFieldName];
            sSeries.YValues.ValueSource:=sFieldName;
          end;
        end;
        myChart.AssignChart(pChart);
      except
        ShowMessage('图形设置错误!')
      end;
    end;
      

  2.   

    如果只是做图形分析的话,劝你最好是用dbchart或chart,
    创建图形如下:
        Vseries := THorizBarSeries.Create(DBChart);
                 With Vseries do
                 begin
                    ParentChart         := DBChart ;
                    Marks.Style         := smsValue;
                    DataSource          := VDataSet;
                    Title               := Vtitle[i];
                    XLabelsSource       := Vlabel;
                    XValues.ValueSource := VY[i];
                 end;
             end;         //点状图形
             if VType = 'TPointSeries' then
             begin
                 Vseries := TPointSeries.Create(DBChart);
                 With Vseries do
                 begin
                    ParentChart         := DBChart ;
                    s.Style         := smsValue;
                    DataSource          := VDataSet;
                    Title               := Vtitle[i];
                    XLabelsSource       := Vlabel;
                    YValues.ValueSource := VY[i];
                 end;
             end;         //园形比例图
             if VType = 'TPieSeries' then
             begin
                 Vseries := TPieSeries.Create(DBChartPie);
                 With Vseries do
                 begin
                    ParentChart          := DBChartPie;
                    Marks.Style          := smsValue;
                    DataSource           := VDataSet;
                    Title                := Vtitle[i];
                    XLabelsSource        := Vlabel;
                    YValues.ValueSource  := VY[i];
                    if Not DBChartPie.Visible then
                    begin
                       DBChartPie.Visible := True;
                       DBChartPie.Align := alClient;
                    end;
                 end;
             end;
      

  3.   

    别外,如果只是做数据分析的话,可以用dbchart进行数据源设置,多建几个series就可以了,只是字段名区分开就可以实现!上面代码已经说的很清晰了!该结帖了!