我正在使用Delphi 10和TChart,TPointSeries,水平滚动,目前从PostgreSQL数据库加载的数据太多(100条曲线,每条曲线包含数千个点)。
答案 0 :(得分:1)
- 是否可以从数据库(使用LIMIT和OFFSET)仅加载需要在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的示例here。
更新结束
- 在没有加载所有这些要点的情况下,是否可以告知TChart我有多少积分?
不,但你可以保留变量。
- 只有在检查图例中相应的复选框时,是否可以将图例中的所有曲线描述加载到图表中?我不希望图表显示数据库中可用的所有系列,但希望它在图例中显示所有可用的系列。当用户单击图例中的特定系列时,将加载相应的系列数据并将其表示为曲线。
您可以使用OnCLickLegend
事件并循环播放您的系列。目前,该系列的Active
属性是最新的,因此您可以Clear
not Active
那些Add
/ AddXY
指向那些这是Active
。