我在做图表分析,想在用行时改变类型,选择柱状图时就显示柱状图,选择线行图就显示线行图。并且可以选择不同的字段来分析。
给个实现代码,谢谢;
英语不好,所以看不懂联机帮助。

解决方案 »

  1.   

    用微软的OWC组件,其中有一个TChartSpace他可以实现所有的复杂统计,并生成图形显示;很好,推荐研究一下;
      

  2.   

    用TDBChart,你只能先做好几个图(柱状图、线行图)显示的时候你把一个显示,一个隐藏就行
      

  3.   

    TDBChart,却实可行,可以动态的实现形状的,写少良的代码就可以,楼上的办法也不错,不过,做出的图形当数据量很大的时候,很难看 的 。
      

  4.   

    TDecicionQuery,TDecicionGraph等决策控件,挺好用的
      

  5.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, DB, DBTables, StdCtrls, TeeEdit, TeeProcs, TeEngine,Series,
      Chart, DBChart,TeExport, Grids, DBGrids;type
      TForm1 = class(TForm)
        DBChart1: TDBChart;
        ChartPreviewer1: TChartPreviewer;
        ChartEditor1: TChartEditor;
        Panel1: TPanel;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Label5: TLabel;
        RadioGroup1: TRadioGroup;
        AliasCombo: TComboBox;
        TableNameCombo: TComboBox;
        XLabelCombo: TComboBox;
        XCombo: TComboBox;
        YCombo: TComboBox;
        AddSerBtn: TButton;
        CheckBox1: TCheckBox;
        CheckBox2: TCheckBox;
        EditBtn: TButton;
        PrintBtn: TButton;
        ExportBtn: TButton;
        CloseBtn: TButton;
        Table1: TTable;
        Timer1: TTimer;
        procedure FormCreate(Sender: TObject);
        procedure AliasComboChange(Sender: TObject);
        procedure TableNameComboChange(Sender: TObject);
        procedure RadioGroup1Click(Sender: TObject);
        procedure AddSerBtnClick(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
        procedure CheckBox1Click(Sender: TObject);
        procedure CheckBox2Click(Sender: TObject);
        procedure EditBtnClick(Sender: TObject);
        procedure PrintBtnClick(Sender: TObject);
        procedure CloseBtnClick(Sender: TObject);
        procedure ExportBtnClick(Sender: TObject);
        
      private
        mySeries:TChartSeries;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
        Session.GetAliasNames(AliasCombo.Items);
        AliasCombo.ItemIndex:=0;
        AliasComboChange(self);
        AddSerBtn.Enabled:=false;
        CheckBox1.Checked:=True;
        CheckBox2.Enabled:=false;
        Timer1.Enabled:=false;
    end;procedure TForm1.AliasComboChange(Sender: TObject);
    begin
       try
       begin
        Session.GetTableNames(AliasCombo.Items[AliasCombo.ItemIndex],'',true,false,TableNameCombo.Items);
        TableNameCombo.ItemIndex:=0;
         Table1.DatabaseName:=AliasCombo.Items[AliasCombo.ItemIndex];
        TableNameComboChange(self);
       end;
       except
       showmessage('用户名或密码有错误,请重输。');
       end;
    end;procedure TForm1.TableNameComboChange(Sender: TObject);
    var
      i:integer;
    begin
        XLabelCombo.Items.Clear;
        XCombo.items.Clear;
        YCombo.items.Clear;
        XLabelCombo.Text:='';
        XCombo.Text:='';
        YCombo.Text:='';
       Table1.TableName:=TableNameCombo.Items.Strings[TableNameCombo.ItemIndex];
       Table1.getfieldnames(XLabelCombo.Items);
        Table1.open;
         for i:=0 to XLabelCombo.Items.Count-1 do
         begin
         if Table1.fields[i].DataType in [ ftSmallint, ftInteger, ftWord,ftFloat, ftCurrency,
                              ftDate, ftTime, ftDateTime]  then
          begin
            XCombo.items.Add(XLabelCombo.Items.Strings[i]);
            YCombo.items.Add(XLabelCombo.Items.Strings[i]);
          end;
         end;
         Table1.close;
    end;procedure TForm1.RadioGroup1Click(Sender: TObject);
    begin
        if not AddSerBtn.Enabled then
          AddSerBtn.Enabled:=true;
    end;procedure TForm1.AddSerBtnClick(Sender: TObject);
    var
      mytable:TTable;
    begin
       case RadioGroup1.ItemIndex of
       0:  mySeries:=TLineSeries.Create(self);
       1:  mySeries:=TBarSeries.Create(self);
       2:  begin
           mySeries:=TPieSeries.Create(self);
           CheckBox2.Enabled:=True;
           end;
       end;
        DBChart1.AddSeries(mySeries);
        mytable:=TTable.Create(self);
       with mytable do
       begin
        close;
        DatabaseName:=AliasCombo.Items.Strings[AliasCombo.ItemIndex];
        TableName:=TableNameCombo.Items.Strings[TableNameCombo.ItemIndex];
        mySeries.DataSource:=mytable;
        mySeries.XLabelsSource:=XLabelCombo.Items.Strings[XLabelCombo.ItemIndex];
        mySeries.XValues.ValueSource:=XCombo.Items.Strings[XCombo.ItemIndex];
        mySeries.YValues.ValueSource:=YCombo.Items.Strings[YCombo.ItemIndex];
        open;
       end;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
       (mySeries as TPieSeries).Rotate(10);
    end;procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
        if CheckBox1.Checked then
           DBChart1.View3D:=True
        else
           DBChart1.View3D:=false;
    end;procedure TForm1.CheckBox2Click(Sender: TObject);
    begin
        if CheckBox2.Checked then
           Timer1.Enabled:=True
        else
           Timer1.Enabled:=false;
    end;procedure TForm1.EditBtnClick(Sender: TObject);
    begin
     ChartEditor1.Execute;
    end;procedure TForm1.PrintBtnClick(Sender: TObject);
    begin
       ChartPreviewer1.Execute;
    end;procedure TForm1.CloseBtnClick(Sender: TObject);
    begin
       Close;
    end;procedure TForm1.ExportBtnClick(Sender: TObject);
    var
      myexport: TTeeExportForm;
    begin
        myexport:=TTeeExportForm.Create(self);
        myexport.ExportPanel:=DBChart1;
        myexport.showModal;
    end;
    end.