Postgresql 仅将当前数据加载到TChart

Postgresql 仅将当前数据加载到TChart,postgresql,delphi,scroll,teechart,Postgresql,Delphi,Scroll,Teechart,我正在使用Delphi10和TChart、TPointSeries、水平滚动,目前有太多的数据100条曲线,每个曲线都包含从PostgreSQL数据库加载的数千个点 是否可以仅从数据库加载需要在TChart当前滚动窗口中显示的限制和偏移数据? 当我滚动到没有数据的区域时,是否有一些需要数据的事件触发? 在不加载所有这些点的情况下,是否可以告知TChart我有多少点? 只有在我选中图例中相应的复选框时,才能将实际数据加载到图表中,并在图例中显示所有曲线的描述吗?我不希望该图表显示数据库中所有可用的

我正在使用Delphi10和TChart、TPointSeries、水平滚动,目前有太多的数据100条曲线,每个曲线都包含从PostgreSQL数据库加载的数千个点

是否可以仅从数据库加载需要在TChart当前滚动窗口中显示的限制和偏移数据? 当我滚动到没有数据的区域时,是否有一些需要数据的事件触发? 在不加载所有这些点的情况下,是否可以告知TChart我有多少点? 只有在我选中图例中相应的复选框时,才能将实际数据加载到图表中,并在图例中显示所有曲线的描述吗?我不希望该图表显示数据库中所有可用的系列,但希望它在图例中显示所有可用的系列。当用户单击图例中的特定序列时,相应的序列数据将被加载并表示为曲线。 是否可以仅从数据库加载需要在TChart当前滚动窗口中显示的限制和偏移数据? 您可以手动循环数据并调用Add/AddXY函数来执行此操作。 然后,在OnScroll事件中,您可以删除轴范围外/远的点,并添加轴范围内/旁边的点

当我滚动到没有数据的区域时,是否有一些需要数据的事件触发? 不可以。您应该使用OnScroll事件并自己检查它

更新

下面提供了一个可以执行的示例:

constructor TForm1.Create(AOwner: TComponent);
begin
  inherited;
  chart.OnScroll := chartScroll;
  chart.OnZoom := chartZoom;
end;

procedure TForm1.displayRange();
var startDate, endDate: TDateTime;
begin
  startDate := TDateTime(chart.BottomAxis.Minimum);
  endDate   := TDateTime(chart.BottomAxis.Maximum);
  Log(Format('start=%d, end=%d', [
    FindClosestIndex(startDate, chart.Series[0].XValues),
    FindClosestIndex(endDate, chart.Series[0].XValues)
  ]));
end;

procedure TForm1.chartScroll(Sender: TObject);
begin
  displayRange();
end;

procedure TForm1.chartZoom(Sender: TObject);
begin
  displayRange();
end;
可以以FindClosestIndex为例

更新结束

在不加载所有这些点的情况下,是否可以告知TChart我有多少点? 不需要,但是你可以维护变量

只有在我选中图例中相应的复选框时,才能将实际数据加载到图表中,并在图例中显示所有曲线的描述吗?我不希望该图表显示数据库中所有可用的系列,但希望它在图例中显示所有可用的系列。当用户单击图例中的特定序列时,相应的序列数据将被加载并表示为曲线。
您可以使用OnCLickLegend事件并循环序列。此时,序列的活动属性是最新的,因此您可以清除那些不活动的属性,并且可以向那些活动的属性添加/AddXY点。

Yeray,让我来评论我的最后一个问题。我不希望该图表显示数据库中所有可用的系列,但希望它在图例中显示所有可用的系列。当用户单击图例中的特定序列时,相应的序列数据将被加载并表示为曲线。