📄 frxchart.pas
字号:
Sort;
for i := 0 to sl2.Count - 1 do
begin
if i < sl1.Count then v1 := sl1[i] else v1 := '';
if i < sl2.Count then v2 := sl2[i] else v2 := '';
if i < sl3.Count then v3 := sl3[i] else v3 := '';
if i < sl4.Count then v4 := sl4[i] else v4 := '';
if i < sl5.Count then v5 := sl5[i] else v5 := '';
if i < sl6.Count then v6 := sl6[i] else v6 := '';
Helper.AddValues(Series, v1, v2, v3, v4, v5, v6, FXType);
end;
end;
finally
Helper.Free;
sl1.Free;
sl2.Free;
sl3.Free;
sl4.Free;
sl5.Free;
sl6.Free;
end;
end;
{ TfrxSeriesData }
constructor TfrxSeriesData.Create(Report: TfrxReport);
begin
inherited Create(TfrxSeriesItem);
FReport := Report;
end;
function TfrxSeriesData.Add: TfrxSeriesItem;
begin
Result := TfrxSeriesItem(inherited Add);
end;
function TfrxSeriesData.GetSeries(Index: Integer): TfrxSeriesItem;
begin
Result := TfrxSeriesItem(inherited Items[Index]);
end;
{ TfrxChartView }
constructor TfrxChartView.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
CreateChart;
FSeriesData := TfrxSeriesData.Create(Report);
end;
destructor TfrxChartView.Destroy;
begin
FChart.Free;
inherited Destroy;
FSeriesData.Free;
end;
class function TfrxChartView.GetDescription: String;
begin
Result := frxResources.Get('obChart');
end;
procedure TfrxChartView.Notification(AComponent: TComponent; Operation: TOperation);
var
i: Integer;
begin
inherited;
if Operation = opRemove then
begin
for i := 0 to FSeriesData.Count - 1 do
if AComponent is TfrxDataSet then
begin
if FSeriesData[i].DataSet = AComponent then
FSeriesData[i].DataSet := nil;
end
else if AComponent is TfrxBand then
begin
if FSeriesData[i].DataBand = AComponent then
FSeriesData[i].DataBand := nil;
end;
end;
end;
class function TfrxChartView.GetChartClass: TChartClass;
begin
Result := TChart;
end;
procedure TfrxChartView.CreateChart;
begin
FChart := GetChartClass.Create(Self);
with FChart do
begin
Color := clWhite;
BevelInner := bvNone;
BevelOuter := bvNone;
Name := 'Chart';
Frame.Visible := False;
View3DOptions.Rotation := 0;
Title.Text.Text := '';
end;
end;
procedure TfrxChartView.DefineProperties(Filer: TFiler);
begin
inherited;
Filer.DefineBinaryProperty('Chart', ReadData, WriteData, True);
Filer.DefineProperty('ChartElevation', ReadData1, WriteData1, True);
Filer.DefineProperty('SeriesData', ReadData2, WriteData2, True);
end;
procedure TfrxChartView.ReadData(Stream: TStream);
begin
FChart.Free;
CreateChart;
Stream.ReadComponent(FChart);
end;
procedure TfrxChartView.WriteData(Stream: TStream);
begin
Stream.WriteComponent(FChart);
end;
procedure TfrxChartView.ReadData1(Reader: TReader);
begin
FChart.View3DOptions.Elevation := Reader.ReadInteger;
end;
procedure TfrxChartView.WriteData1(Writer: TWriter);
begin
Writer.WriteInteger(FChart.View3DOptions.Elevation);
end;
procedure TfrxChartView.ReadData2(Reader: TReader);
begin
frxReadCollection(FSeriesData, Reader, Self);
end;
procedure TfrxChartView.WriteData2(Writer: TWriter);
begin
frxWriteCollection(FSeriesData, Writer, Self);
end;
procedure TfrxChartView.FillChart;
var
i: Integer;
begin
for i := 0 to FSeriesData.Count - 1 do
FSeriesData[i].FillSeries(FChart.Series[i]);
end;
procedure TfrxChartView.Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX,
OffsetY: Extended);
var
EMF: TMetafile;
begin
BeginDraw(Canvas, ScaleX, ScaleY, OffsetX, OffsetY);
DrawBackground;
FillChart;
if Color = clTransparent then
FChart.Color := clWhite else
FChart.Color := Color;
FChart.BufferedDisplay := True;
EMF := FChart.TeeCreateMetafile(False, Rect(0, 0, Round(Width), Round(Height)));
Canvas.StretchDraw(Rect(FX, FY, FX1, FY1), EMF);
EMF.Free;
DrawFrame;
end;
procedure TfrxChartView.AfterPrint;
var
i: Integer;
begin
for i := 0 to FSeriesData.Count - 1 do
with FSeriesData[i] do
begin
Values1 := '';
Values2 := '';
Values3 := '';
Values4 := '';
Values5 := '';
Values6 := '';
end;
end;
procedure TfrxChartView.GetData;
var
i: Integer;
begin
inherited;
for i := 0 to FSeriesData.Count - 1 do
with FSeriesData[i] do
if (DataType = dtDBData) and (DataSet <> nil) then
begin
Values1 := '';
Values2 := '';
Values3 := '';
Values4 := '';
Values5 := '';
Values6 := '';
DataSet.First;
while not DataSet.Eof do
begin
if Source1 <> '' then
Values1 := Values1 + ';' + VarToStr(Report.Calc(Source1));
if Source2 <> '' then
Values2 := Values2 + ';' + VarToStr(Report.Calc(Source2));
if Source3 <> '' then
Values3 := Values3 + ';' + VarToStr(Report.Calc(Source3));
if Source4 <> '' then
Values4 := Values4 + ';' + VarToStr(Report.Calc(Source4));
if Source5 <> '' then
Values5 := Values5 + ';' + VarToStr(Report.Calc(Source5));
if Source6 <> '' then
Values6 := Values6 + ';' + VarToStr(Report.Calc(Source6));
DataSet.Next;
end;
end
else if DataType = dtFixedData then
begin
Values1 := Source1;
Values2 := Source2;
Values3 := Source3;
Values4 := Source4;
Values5 := Source5;
Values6 := Source6;
end
end;
procedure TfrxChartView.BeforeStartReport;
var
i: Integer;
begin
for i := 0 to FSeriesData.Count - 1 do
with FSeriesData[i] do
begin
Values1 := '';
Values2 := '';
Values3 := '';
Values4 := '';
Values5 := '';
Values6 := '';
end;
Report.Engine.NotifyList.Add(Self);
end;
procedure TfrxChartView.OnNotify(Sender: TObject);
var
i: Integer;
begin
inherited;
for i := 0 to FSeriesData.Count - 1 do
with FSeriesData[i] do
if (DataType = dtBandData) and (DataBand = Sender) then
begin
Report.CurObject := Self.Name;
if Source1 <> '' then
Values1 := Values1 + ';' + VarToStr(Report.Calc(Source1));
if Source2 <> '' then
Values2 := Values2 + ';' + VarToStr(Report.Calc(Source2));
if Source3 <> '' then
Values3 := Values3 + ';' + VarToStr(Report.Calc(Source3));
if Source4 <> '' then
Values4 := Values4 + ';' + VarToStr(Report.Calc(Source4));
if Source5 <> '' then
Values5 := Values5 + ';' + VarToStr(Report.Calc(Source5));
if Source6 <> '' then
Values6 := Values6 + ';' + VarToStr(Report.Calc(Source6));
end;
end;
procedure TfrxChartView.AddSeries(Series: TfrxChartSeries);
var
sc: TSeriesClass;
s: TChartSeries;
b: Boolean;
begin
sc := frxChartSeries[Integer(Series)];
s := TChartSeries(sc.NewInstance);
s.Create(Chart);
Chart.AddSeries(s);
SeriesData.Add;
with Chart do
begin
b := not (s is TPieSeries);
View3DOptions.Orthogonal := b;
AxisVisible := b;
View3DWalls := b;
end;
end;
procedure TfrxChartView.ClearSeries;
begin
FChart.Free;
CreateChart;
SeriesData.Clear;
end;
initialization
{$IFNDEF TeeChartStd}
{$IFNDEF TeeChartStd7}
{$IFNDEF TeeChart4}
RegisterTeeStandardSeries;
{$ENDIF}
{$ENDIF}
{$ENDIF}
frxObjects.RegisterObject1(TfrxChartView, nil, '', '', 0, 25);
finalization
frxObjects.UnRegister(TfrxChartView);
end.
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -