【问题标题】:Best practice regarding plotting graph data关于绘制图形数据的最佳实践
【发布时间】:2019-09-13 07:57:23
【问题描述】:

希望这很清楚......

我想知道 PaintBox 控件是否可以允许用户从左到右滚动数据?想象一下它就像一个示波器显示器,其中一次捕获允许缩放和滚动。在这种情况下,我不需要缩放。所以,我的 Paintbox 是 800x600,我的数据集是 16000x600。

我可以在 800x600 区域绘制如下图,完全没有问题,并且可以应用缩放来获取所有数据,但我想保持 Y 轴缩放为 1 并且能够向左滚动/拖动/right 并查看数据。

    for J := 1 to ((Form1.Memo1.Lines.count)-1) do
    begin
      MyTorques[J] := StrToInt(Form1.Memo1.Lines[J]);
      Tqmult := ((StrToInt(Label6.Caption) + 500) Div 600);
      Ycalc[J] := ((MyTorques[J]) Div Tqmult);
      InvY[J] := (600 - (Ycalc[J]));
      X1 := (J-1);
      Y1 := InvY[J-1];
      X2 := (J);
      Y2 := InvY[J];
        with PaintBox1.Canvas do
        begin
          pen.Style := psSolid;
          pen.Color := clBlack;
          pen.Width := 1;
          moveto(X1, Y1);
          Lineto(X2, Y2);
          Label51.Caption := IntToStr(X1);
          Label52.Caption := IntToStr(Y1);
          Label28.Caption := IntToStr(X2);
          Label29.Caption := IntToStr(Y2);
          Label35.Caption := IntToStr(Tqmult);
          Label37.Caption := IntToStr(Ycalc[J]);
          Label39.Caption := IntToStr(InvY[J]);
          Label41.Caption := IntToStr(MyTorques[J]);
        end;
      if MyTorques[J] < Smallest Then
      Begin
        Smallest := MyTorques[J];
        SmallestIndex := J;
      end;
      if MyTorques[J] > Largest Then
      begin
        Largest := MyTorques[J];
        LargestIndex := J;
      end;
      Label30.Caption := IntToStr(Smallest);
      Label31.Caption := IntToStr(SmallestIndex);
      Label32.Caption := IntToStr(Largest);
      Label33.Caption := IntToStr(LargestIndex);
    end;

那么,我的paintbox.canvas 是否需要大小为 16000x600,并在顶部大小为 800x600 的上方设置一个“窗口”,并且可以通过垂直和水平约束拖动 Paintbox 控件?

【问题讨论】:

  • 添加一个滚动条并使用它的位置来计算整个数据集的可见窗口。使用图表库要容易得多。
  • 您是否考虑过使用 Delphi 附带的 TChart 组件?
  • TChart 是调色板中的一个组件吗?我没有(搜索图表),但这是使用 Delphi 社区版的结果吗?
  • 是的,在 TeeChart Std 中,至少在我的 Delphi 10.2.3 Tokyo Professional 中。也应包含在 10.3 Rio CE 中。 AFIK,社区版与专业版相同,只是使用了另一个许可证。也许你只是没有安装 TChart 组件?
  • 进行了重新安装,这是在此过程中的一个选项。打算试一试,谢谢 Delphi Coder。

标签: delphi delphi-10.3-rio paintbox


【解决方案1】:

PaintBox 默认没有内置任何滚动支持。

因此,如果您想拥有滚动功能,则必须将 PaintBox 放入其他可滚动控件(如 ScrollBox)中,并将 PaintBox 的大小设置为足够大以包含整个绘图的渲染。

但这是一种不好的做法。为什么?这样做你将花费大量时间来绘制你的情节,即使你一次只有一部分对用户可见。

相反,您应该考虑仅绘制用户在 sima 时间实际上可以看到的部分绘图(适合 PaintBox),然后当用户滚动到绘图上的不同位置时重新绘制绘图。

【讨论】:

  • 有趣的方法和关于资源的一个很好的观点。调查开始。
猜你喜欢
  • 1970-01-01
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2016-08-17
  • 1970-01-01
  • 2016-06-30
相关资源
最近更新 更多