【问题标题】:Load only current data into TChart仅将当前数据加载到 TChart
【发布时间】:2017-01-12 12:30:32
【问题描述】:

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

  • 是否可以从数据库(使用 LIMIT 和 OFFSET)仅加载需要在 TChart 的当前滚动“窗口”中显示的数据?
  • 当我滚动到没有数据的区域时,是否会触发一些“需要数据”事件?
  • 是否可以在不加载所有积分的情况下告知 TChart 我有多少积分?
  • 只有当我选中图例中的相应复选框时,是否可以将所有曲线的描述都加载到图例中并将实际数据加载到图表中?我不希望 Chart 显示数据库中所有可用的系列,但希望它在图例中显示所有可用系列。当用户点击图例中的特定系列时,将加载相应的系列数据并以曲线表示。

【问题讨论】:

    标签: postgresql delphi scroll teechart


    【解决方案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 我有多少积分?

    不,但你可以这样做维护变量。

    • 只有当我选中图例中的相应复选框时,是否可以将所有曲线的描述都加载到图例中并将实际数据加载到图表中?我不希望 Chart 显示数据库中所有可用的系列,但希望它在图例中显示所有可用系列。当用户点击图例中的特定系列时,将加载相应的系列数据并以曲线表示。

    您可以使用OnCLickLegend 事件并循环您的系列。此时系列的Active 属性是最新的,因此您可以Clear 那些not Active 并且您可以Add/AddXY 指向那些Active

    【讨论】:

    • 是的,让我评论我的最后一个问题。我不希望 Chart 显示数据库中所有可用的系列,但希望它在图例中显示所有可用系列。当用户点击图例中的特定系列时,将加载相应的系列数据并表示为曲线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多