1

プログラムでバーシリーズを作成しています(Delphi2007、TeeChar 7無料版)。グラフに棒を隣接させたいので、複数の棒系列を作成し、multibar プロパティを使用しようとしています。

main_unit で multibar プロパティを設定すると、アクセス違反が発生します (デバッグ時に barseries オブジェクトを調べると、multibar プロパティが「範囲外」であることがわかります)。バーシリーズが作成されたユニットにプロパティを設定した場合にのみ、エラーは発生しません。バーシリーズを外部から操作するにはどうすればよいですか? unit1 でこの目的のためにプロパティを設定する必要がありますか?

ここに私のコードのスニペットがあります:

unit unit1 
type TMyChart = Class
fchart: TChart;
procedure addSinglebarSeries(var X, Y: integer)    
....
implementation
function TSignalchart.addSinglebarSeries(var X, Y: integer): TBarSeries;
j, n : integer;   
begin
   result := TBarSeries.Create(fChart);
   result.AddXY(x,Y,inttostr(x), clRed);
   barseries.MultiBar := mbStacked;  //here no access violation
end;

---- 
unit main-unit

implementation
uses TeEngine, TeeProcs, unit1;
procedure myprocedure;
var 
 newChart : TMyChart;
 X, Y := array of integer;
 barseries : TBarSeries;
 aX, aY, i: integer;

begin
 //I create the newchart object, I create X, Y

  for i := 0 to length(X) - 1 do
    begin
      aX := X[i];
      aY := Y[i];
      barseries := newChart.addsinglebarSeries(aX,aY);
    end;
   //barseries.MultiBar := mbStacked; //access violation!!
  end;  
4

1 に答える 1

1

TeeChart(D2007)に 5 つのマルチバー積み上げシリーズを追加する例を次に示します。コンポーネント パレットからドロップされたコンポーネントでありChart1、同じ方法で配置された標準です。TChartButton1TButton

// D2007+ way to easily initialize dynamic arrays
type
  TIntArray=array of Integer;

procedure TForm1.Button1Click(Sender: TObject);
var
  BarSeries: TBarSeries;
  X, Y: TIntArray;
  i: Integer;
begin
  X := TIntArray.Create(1, 2, 3, 4, 5);       // SetLength and initialize rolled into one
  Y := TIntArray.Create(10, 20, 30, 40, 50);  // Nonsense values, of course.
  Chart1.SeriesList.Clear;
  for i := Low(X) to High(X) do
  begin
    BarSeries := TBarSeries.Create(Chart1);
    BarSeries.AddXY(X[i], Y[i]);
    BarSeries.MultiBar := mbStacked;
    Chart1.AddSeries(BarSeries);
  end;
end;

クリック後のフォームは次のButton1とおりです。

ここに画像の説明を入力

于 2012-06-28T19:07:13.383 に答える