我在表单上有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;