object FormChart: TFormChart
Left = 106 Top = 175 Width = 758 Height = 485 Caption = '图形分析' Color = clBtnFace Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -12 Font.Name = '宋体' Font.Style = [] OldCreateOrder = False Position = poDesktopCenter OnClose = FormClose OnCreate = FormCreate OnShow = FormShow PixelsPerInch = 96 TextHeight = 12 object Panel1: TPanel Left = 0 Top = 0 Width = 750 Height = 65 Align = alTop BevelOuter = bvNone TabOrder = 0 object Label1: TLabel Left = 368 Top = 13 Width = 138 Height = 12 Caption = '标识字段(XLabelsSource)' end object Label2: TLabel Left = 368 Top = 38 Width = 126 Height = 12 Caption = '统计字段(ValueSource)' end object RadioGroup1: TRadioGroup Left = 8 Top = 2 Width = 265 Height = 50 Caption = '图形格式' Columns = 4 Items.Strings = ( '柱状图' '饼形图' '领域图' '曲线图') TabOrder = 0 OnClick = RadioGroup1Click end object CheckBox1: TCheckBox Left = 289 Top = 25 Width = 62 Height = 17 BiDiMode = bdLeftToRight Caption = '3D风格' ParentBiDiMode = False TabOrder = 1 OnClick = CheckBox1Click end object BitBtn1: TBitBtn Left = 663 Top = 6 Width = 82 Height = 25 Caption = '生成图形(&B)' TabOrder = 2 OnClick = BitBtn1Click end object ComboBox1: TComboBox Left = 512 Top = 8 Width = 145 Height = 20 ImeName = '极品五笔输入法' ItemHeight = 12 TabOrder = 3 end object ComboBox2: TComboBox Left = 512 Top = 32 Width = 145 Height = 20 ImeName = '极品五笔输入法' ItemHeight = 12 TabOrder = 4 end object BitBtn2: TBitBtn Left = 663 Top = 34 Width = 34 Height = 25 Caption = '打印' TabOrder = 5 OnClick = BitBtn2Click end object BitBtn3: TBitBtn Left = 709 Top = 34 Width = 34 Height = 25 Caption = '导出' TabOrder = 6 OnClick = BitBtn3Click end end object DBChart1: TDBChart Left = 0 Top = 65 Width = 750 Height = 393 BackWall.Brush.Color = clWhite BackWall.Brush.Style = bsClear Title.Text.Strings = ( 'TDBChart') View3D = False Align = alClient TabOrder = 1 endend
//单元设计: 陈新光(CXG)
//设计时间: 2009-10-8 16:57:35//单元功用: 图形分析窗体
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; BitBtn2: TBitBtn; BitBtn3: TBitBtn; 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 BitBtn2Click(Sender: TObject); procedure BitBtn3Click(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 Execute(dataset: TDataSet; ATitle: string = '');
implementation
uses
uFunction;{$R *.dfm}
procedure Execute(dataset: TDataSet; ATitle: string = '');
begin FormChart := TFormChart.Create(nil); try FormChart.Fdataset := dataset; FormChart.FTitle := ATitle; FormChart.RadioGroup1.ItemIndex := 0; FormChart.DBChart1.Title.Text.Clear; FormChart.DBChart1.Title.Text.Add(FormChart.FTitle); FormChart.ShowModal; finally FreeAndNil(FormChart); end;end;procedure TFormChart.BitBtn1Click(Sender: TObject);
begin FFirstRun := False; CreateChart;end;procedure TFormChart.BitBtn2Click(Sender: TObject);
begin DBChart1.Print;end;procedure TFormChart.BitBtn3Click(Sender: TObject);
var sav: TSaveDialog;begin sav := TSaveDialog.Create(nil); try sav.Filter := '位图(BMP)|*.BMP'; sav.FileName := '文件1'; sav.FilterIndex := 1; if sav.Execute then DBChart1.SaveToBitmapFile(sav.FileName + '.BMP'); finally sav.Free; end;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 FreeAndNil(Bar); FreeAndNil(Pie); FreeAndNil(Area); FreeAndNil(FastLine); Action := caFree; FormChart := nil;end;procedure TFormChart.FormCreate(Sender: TObject);
begin FFirstRun := True; CreateSeries;end;procedure TFormChart.FormShow(Sender: TObject);
begin CheckBox1.Checked := True; 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 CreateChart;end;end.