{*******************************************************}
{ }
{ 图形分析 }
{ }
{ 版权所有 (C) 2008 咏南工作室(陈新光) }
{ }
{*******************************************************}
unit uChart;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, DBChart, StdCtrls,db,Series,
Buttons;
type
TColParams = record
FieldName: string;
Title: string;
end;
TFormChart = class(TForm)
Panel1: TPanel;
DBChart1: TDBChart;
RadioGroup1: TRadioGroup;
CheckBox1: TCheckBox;
Label1: TLabel;
Label2: TLabel;
BitBtn1: TBitBtn;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure CheckBox1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FFirstRun:Boolean;
ColArray,ColArray2: array of TColParams;
FDataSet:TDataSet;
FTitle:string;
Bar:TBarSeries; //柱形
Pie:TPieSeries; //饼形
Area:TAreaSeries; //领域图
FastLine:TFastLineSeries; //曲线图
procedure CreateSeries;
procedure CreateChart;
procedure FillField;
function GetLableFieldName:string;
function GetValueFieldName:string;
{ Private declarations }
public
{ Public declarations }
end;
var
FormChart: TFormChart;
const
FLable='请录入标识字段';
FValue='请录入统计字段';
//==============================================================================
// ATitle: TDBChart.title
//==============================================================================
procedure ShowChart(ADataSet:TDataSet;ATitle:string='');
implementation
{$R *.dfm}
procedure ShowChart(ADataSet:TDataSet;ATitle:string='');
begin
FormChart:=TFormChart.Create(nil);
try
FormChart.FDataSet:=ADataSet;
FormChart.FTitle:=ATitle;
FormChart.RadioGroup1.ItemIndex:=0;
FormChart.DBChart1.Title.Text.Clear;
FormChart.DBChart1.Title.Text.Add(FormChart.FTitle);
FormChart.ShowModal;
finally
FormChart.Free;
end;
end;
procedure TFormChart.BitBtn1Click(Sender: TObject);
begin
// DBChart1.FreeAllSeries();
FFirstRun:=False;
CreateChart;
end;
procedure TFormChart.CheckBox1Click(Sender: TObject);
begin
DBChart1.View3D:=CheckBox1.Checked;
end;
procedure TFormChart.CreateChart;
begin
if FFirstRun then exit;
if Trim(ComboBox1.Text)='' then
begin
ShowMessage(FLable);
Exit;
end;
if Trim(ComboBox2.Text)='' then
begin
ShowMessage(FValue);
Exit;
end;
DBChart1.SeriesList.Clear;
DBChart1.View3D:=CheckBox1.Checked;
case RadioGroup1.ItemIndex of
0:
begin
with Bar do
begin
ParentChart := DBChart1;
marks.Style:= smsvalue;
DataSource := FDataSet;
XLabelsSource :=GetLableFieldName;
YValues.ValueSource :=GetValueFieldName;
end;
end;
1:
begin
with Pie do
begin
ParentChart := DBChart1;
marks.Style:= smsvalue;
DataSource := FDataSet;
XLabelsSource :=GetLableFieldName;
YValues.ValueSource :=GetValueFieldName;
end;
end;
2:
begin
with Area do
begin
ParentChart := DBChart1;
marks.Style:= smsvalue;
DataSource := FDataSet;
XLabelsSource :=GetLableFieldName;
YValues.ValueSource :=GetValueFieldName;
end;
end;
3:
begin
with FastLine do
begin
ParentChart := DBChart1;
marks.Style:= smsvalue;
DataSource := FDataSet;
XLabelsSource :=GetLableFieldName;
YValues.ValueSource :=GetValueFieldName;
end;
end;
end;
FFirstRun:=False;
end;
procedure TFormChart.CreateSeries;
begin
Bar:=TBarSeries.Create(Self);
Pie:=TPieSeries.Create(Self);
Area:=TAreaSeries.Create(Self);
FastLine:=TFastLineSeries.Create(Self);
end;
procedure TFormChart.FillField;
var
i:Integer;
begin
ComboBox1.Items.Clear;
ComboBox2.Items.Clear;
SetLength(ColArray,FDataSet.FieldCount);
SetLength(ColArray2,FDataSet.FieldCount);
for i:=0 to FDataSet.FieldCount-1 do
begin
if not (FDataSet.Fields[i] is TNumericField)
or (FDataSet.Fields[i] is TIntegerField) then
begin
ColArray[i].FieldName:=FDataSet.Fields[i].FieldName;
ColArray[i].Title:=FDataSet.Fields[i].DisplayLabel;
ComboBox1.Items.Add(ColArray[i].Title);
if ComboBox1.Items.Count>0 then
ComboBox1.ItemIndex:=0;
end else
begin
ColArray2[i].FieldName:=FDataSet.Fields[i].FieldName;
ColArray2[i].Title:=FDataSet.Fields[i].DisplayLabel;
ComboBox2.Items.Add(ColArray2[i].Title);
if ComboBox2.Items.Count>0 then
ComboBox2.ItemIndex:=0;
end;
end;
end;
procedure TFormChart.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
procedure TFormChart.FormCreate(Sender: TObject);
begin
FFirstRun:=True;
CreateSeries;
end;
procedure TFormChart.FormDestroy(Sender: TObject);
begin
FreeAndNil(Bar);
FreeAndNil(Pie);
FreeAndNil(Area);
FreeAndNil(FastLine);
FormChart:=nil;
end;
procedure TFormChart.FormShow(Sender: TObject);
begin
FillField;
end;
function TFormChart.GetLableFieldName: string;
var
i:Integer;
begin
for i := Low(ColArray) to High(ColArray) do
begin
if ColArray[i].Title=ComboBox1.Text then
Result:=ColArray[i].FieldName;
end;
end;
function TFormChart.GetValueFieldName: string;
var
i:Integer;
begin
for i := Low(ColArray2) to High(ColArray2) do
begin
if ColArray2[i].Title=ComboBox2.Text then
Result:=ColArray2[i].FieldName;
end;
end;
procedure TFormChart.RadioGroup1Click(Sender: TObject);
begin
// DBChart1.FreeAllSeries();
CreateChart;
end;
end.