我在表单上有TDBChart组件,Checkboxes-Legend用于切换系列'可视性。最多可以看到5个系列 - 这是我的定义。为了加快图表,我试图从数据库加载可见系列的数据。
但是为了在图例中包含所有可能的项目,我需要定义所有系列,并定义数据集和字段名称。
在这种情况下,图表让我不知道有关隐藏系列的缺席列的例外情况。
是否可以加载与图表数据分开的图例?
答案 0 :(得分:0)
在以下示例中,我创建了两个连接到测试DataSource
的系列(TeeChart附带的 TeeChart Pro数据库)。
我在非活动状态时清除系列(Clear
),并在重新激活数据时使用图表CheckDataSource
事件刷新数据(OnClickLegend
)。
注意我正在使用Count
事件显示每个系列OnAfterDraw
。
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;