1

我正在以编程方式创建一个酒吧系列(Delphi2007,TeeChar 7 免费版)。我想在我的图表中有相邻的条形图,所以我尝试创建多个条形图并使用 multibar 属性。

在 main_unit 中设置 multibar 属性时,我遇到访问冲突(调试时,如果我检查 barseries 对象,我可以看到 multibar 属性为“超出范围”)。仅当我在创建 bareries 的单元中设置属性时,我才得到错误。我如何在外部操纵barseries?我是否必须在 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 个多条堆叠系列的示例。Chart1TChart从组件调色板中删除的组件,并且是以相同方式放置的Button1标准:TButton

// 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 回答