TDBChart:在不加载数据的情况下加载图例



我在表单上有TDBChart组件,带有复选框-图例来切换系列的可见性。最多可以看到 5 个系列 - 这是我的定义。为了加快图表的速度,我尝试仅从数据库中加载可见序列的数据。

但是,为了在图例中包含所有可能的项目,我需要使用定义的数据集和字段名称定义所有系列。

在这种情况下,图表让我烦恼,除了关于不可见系列的缺列。

是否可以加载与图表数据分开的图例?

在下面的示例中,我创建了两个连接到测试DataSource的系列(TeeChart Pro 数据库随 TeeChart 一起提供(。
我在非活动时清除序列(Clear(,并在重新激活时刷新其数据(CheckDataSource(,使用图表OnClickLegend事件。
请注意,我使用OnAfterDraw事件Count显示每个系列。

uses Series, CandleCh;
var
  Table1, Table2: TTable;
  barSeries: TBarSeries;
  candleSeries: TCandleSeries;
procedure TForm1.FormCreate(Sender: TObject);
begin
  DBChart1.View3D:=False;
  DBChart1.Legend.CheckBoxes:=True;
  DBChart1.MarginLeft:=10;
  Table1:=TTable.Create(Self);
  Table1.DatabaseName:='TeeChart Pro Database';
  Table1.TableName:='Employee';
  Table2:=TTable.Create(Self);
  Table2.DatabaseName:='TeeChart Pro Database';
  Table2.TableName:='Stock';
  barSeries:=DBChart1.AddSeries(TBarSeries) as TBarSeries;
  candleSeries:=DBChart1.AddSeries(TCandleSeries) as TCandleSeries;
  with barSeries do
  begin
    DataSource:=Table1;
    YValues.ValueSource:='SALARY';
    XLabelsSource:='LASTNAME';
    HorizAxis:=aTopAxis;
  end;
  DBChart1.Axes.Top.Grid.Visible:=False;
  with candleSeries do
  begin
    VertAxis:=aRightAxis;
    DataSource:=Table2;
    YValues.ValueSource:='DATE';
    OpenValues.ValueSource:='OPEN';
    HighValues.ValueSource:='HIGH';
    LowValues.ValueSource:='LOW';
    CloseValues.ValueSource:='CLOSE';
  end;
  Table1.Active:=True;
  Table2.Active:=True;
end;
procedure TForm1.DBChart1ClickLegend(Sender: TCustomChart; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var i: Integer;
begin
  if barSeries.Active then
     barSeries.CheckDataSource
  else
     barSeries.Clear;
  if candleSeries.Active then
     candleSeries.CheckDataSource
  else
     candleSeries.Clear;
end;
procedure TForm1.DBChart1AfterDraw(Sender: TObject);
begin
  Caption:='Bar: ' + IntToStr(barSeries.Count) + ' values, Candle: ' + IntToStr(candleSeries.Count) + ' values';
end;

相关内容

  • 没有找到相关文章

最新更新