delphi獲取fastreport 中chart:(請LZ參考) var VChart :TfrxChartView; begin VChart := TfrxChartView(frxReportConstrue.FindObject('Chart')); end;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.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;
var
VChart :TfrxChartView;
begin
VChart := TfrxChartView(frxReportConstrue.FindObject('Chart'));
end;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.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;