3

トップ投稿:回答を受け入れましたが、うまくいきません。Delphi 7を強調して、新しい質問を投稿します。良い情報を提供してくれたすべての人に感謝します。


1時間かけて1秒間隔で測定しました。

以前の質問で、TStringGridを更新するのに45秒かかり、それを「目に見えるよりも速く」することができました。ループの計算およびデータベース関連の機能を移動することもありますが、驚くべきことに、実際に違いをもたらした変更は、ループ内で増分するのではなく、ループの前にstrindgridのrowCountを3600に設定することでした。

今、私はTChartで同様の問題を抱えています。チャートを事前に割り当ててみたらどうでしょうか?だから、私はできましたが、またはChart1.Series[0].Count := 3600を使用できないよりも、値を直列に明示的に設定するにはどうすればよいですか?AddXy()Add()

非常に単純なグラフがあり、y軸にフロート、x軸に時:秒があります

誰かが助けたり、チャートの描画をスピードアップする別の方法を提案したりできますか?


更新:いくつかはを使用することを提案しTFastLineSeriesましたが、私はその方法がわかりません。

Aha-チャートをダブルクリックして、すべてのシリーズを表示するには、1つを選択して[変更]をクリックします

4

3 に答える 3

5

高速チャートに関する「公式」の推奨事項は、SteemaのWebサイトにあります。

于 2011-01-22T12:31:07.580 に答える
4

私は瞬く間に何百万ものデータポイントを描くことができます。私のやり方は次のとおりです。X値とY値の2つの配列を作成し、それらに値を入力してから、これらの配列をグラフに追加します。例えば:

var
  XValues, YValues: array of double; 
begin

  SetLength(XValues, numberofValues);
  SetLength(YValues, numberofValues);

  for ix := 0 to numberofValues - 1 do 
  begin
    XValues[ix] := ...your values
    YValues[ix] := ...your values
  end;

  Chart.Series[0].XValues.Value := TChartValues(XValues);
  Chart.Series[0].XValues.Count := high(XValues);
  Chart.Series[0].XValues.Modified := true;
  Chart.Series[0].YValues.Value := TChartValues(YValues);
  Chart.Series[0].YValues.Count := high(YValues);
  Chart.Series[0].YValues.Modified := True;

また、描画を高速化するのは、通常のTLineSeriesの代わりにTFastLineSeriesを使用することです。FastlineSeriesを使用する場合は、プロパティDrawAllPointsもあります。falseに設定すると、描画はさらに高速になります。TChartは、画面上の他のデータポイントと同じX位置を共有するデータポイントをスキップします。これらの最初のポイントのみを描画します。

これは、DrawAllPointsオプションを見つける場所です。代替テキスト

于 2011-01-22T15:21:43.073 に答える
2

MichaelSchmooksの回答についてコメントしたいと思います。High(XValues)を使用して系列のカウント値を設定すると、配列の最後の項目が表示されなくなります。これは、high(XValues)が配列のサイズではなく、配列の最大のインデックスを返すためです。

もちろん、これは非常に少ない数のアイテムが追加された場合にのみ気付かれます。

Chart.Series[0].XValues.Count := high(XValues) + 1;
于 2011-07-15T07:57:48.157 に答える