0

購入する前にソフトウェアを試していTeeChartますが、サポートのために Web サイトからここに誘導されました。TScrollPagerTool達成しようとしていることに完璧に思えるので、 を使用して頭を悩ませようとしていますが、サイズ変更時にパフォーマンスの問題が発生しています。このスクロール ツールを使用している場合は、チャートのサイズ変更イベントに次の行を追加することをお勧めします。

ScrollPagerTool.Series := Chart1.Series[0];

シリーズを再割り当てする必要がある理由はわかりませんが、それがないとグラフのサイズが変更されません。さらに、その行は効果的にシリーズを再度追加します。つまり、シリーズが 2 倍になり、次のサイズ変更、シリーズの 3 倍などになるため、数回のサイズ変更後にスクロールでパフォーマンスの問題が発生します。

私がこれを正しく行っているのか、それとも別の方法で行っているのか、誰かに教えてもらえますか?

必要に応じて、さらにコードを投稿できます。

4

1 に答える 1

0

メインシリーズのクローンをTScrollPagerTool使用する最初の注記。TSubChartToolが割り当てられたときに SubChart が設定されるのはそのSeriesためです。シリーズがないと意味がないからです。

一部の TeeChart バージョンでは、各チャートが使用する必要があるスペース ( ChartRects) を計算するために、シリーズをツールに割り当てるときにサブチャートにメイン チャートが既に描画されている必要があります。そのため、OnResizeイベントでシリーズを割り当てますが、TeeChart VCL では作成時にすべてを行うことができます。

uses Series, TeeScrollPagerTool;

procedure TForm1.FormCreate(Sender: TObject);
begin        
  Chart1.AddSeries(TLineSeries).FillSampleValues;
  (Chart1.Tools.Add(TScrollPagerTool) as TScrollPagerTool).Series:=Chart1[0];
end;

バグ:

あなたが言ったように、実際にバグがあるのを見ました。イベントでシリーズを割り当ててOnResize、チャートとサブチャートをフォームに合わせてサイズ変更すると、ソース シリーズが何度も複製されるようになりました。

uses Series, TeeScrollPagerTool;

var scrollPager1: TScrollPagerTool;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Chart1.Align:=alClient;

  scrollPager1:=Chart1.Tools.Add(TScrollPagerTool) as TScrollPagerTool;

  Chart1.AddSeries(TLineSeries).FillSampleValues;
  scrollPager1.Series:=Chart1[0];
end;

procedure TForm1.Chart1Resize(Sender: TObject);
begin
  scrollPager1.Series:=Chart1[0];
end;

私はそれを修正するためにいくつかの変更を加えました:

次のバージョンでは、Seriesプロパティはサブチャート内のすべてのシリーズを削除し、割り当てられたシリーズを複製します。そのため、何度か呼び出しても、クローンが増えることはありません。また、メイン チャートとサブチャートの両方のSetUpScrollPagerを計算する呼び出しも行います。ChartRect

また、公開したので、シリーズを追加または削除することなく、イベントでSetUpScrollPager呼び出して s を調整できます。OnResizeChartRect

procedure TForm1.Chart1Resize(Sender: TObject);
begin
  scrollPager1.SetUpScrollPager;
end;

回避策:

その間、実際のバージョンでは、SubChart 内のすべてのシリーズを削除し、Series プロパティを使用してソース シリーズを複製することができますOnResize

procedure TForm1.Chart1Resize(Sender: TObject);
begin
  scrollPager1.SubChartTChart.RemoveAllSeries;
  scrollPager1.Series:=Chart1[0];
end;

関連機能:

ScollPager に複数のシリーズを含める方法は? このSubChartTChartプロパティを使用して、サブチャートにアクセスし、シリーズをサブチャートに追加/サブチャートから削除できます。Seriesただし、プロパティにはまだ 1 つのシリーズが必要です。したがって、少しトリッキーになります。

uses Series, TeeScrollPagerTool;

var scrollPager1: TScrollPagerTool;

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
  Chart1.Align:=alClient;

  scrollPager1:=Chart1.Tools.Add(TScrollPagerTool) as TScrollPagerTool;

  for i:=0 to 4 do
  begin
    Chart1.AddSeries(TLineSeries).FillSampleValues;
    if scrollPager1.Series=nil then
      scrollPager1.Series:=Chart1[i]
    else
      scrollPager1.SubChartTChart.AddSeries(CloneChartSeries(Chart1[i]));
  end;
end;

そのため、新しいAddSeries(const Value: TChartSeries)メソッドも追加しました。これを使用して、ScrollPager にいくつかのシリーズを追加します。

  for i:=0 to 4 do
  begin
    Chart1.AddSeries(TLineSeries).FillSampleValues;
    scrollPager1.AddSeries(Chart1[i]);
  end;
于 2013-08-19T13:48:57.327 に答える