访问冲突在TChart Delphi组件中添加值

时间:2018-09-12 17:27:22

标签: delphi teechart

我正在尝试使用TChart组件将图形导出到位图文件,但出现了一个非常奇怪的错误。

每次我尝试向图表添加一个值时,我都会从AddY组件中调用TLineSeries函数,并将该值作为参数传递。当我尝试添加较小的值时,该图的行为完全正常,如下所示:

Working chart

当我尝试在第一时间添加一些大价值时,就会发生问题,我会遇到如下访问冲突:

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00450047 in module 'Project1.exe'. Write of address 022AC000'. Process stopped. Used Step or Run to continue.

并且调用堆栈完全为空,唯一的一行是我的项目名称,突出显示的行是dpr文件的“结尾”。

当我继续按OK时,会弹出其他错误: Access violation 1

CPU

由于我对这些错误不够熟练,因此我无法准确调试正在发生的事情,我认为它有点损坏的堆,但由于代码是非常简单,并且该组件隐藏了代码,因为它是第三方组件。

有趣的是,如果我单击确定直到错误消失并添加另一个值,它将正常显示,以及先添加一些小值,然后添加一个大值(大体上我不完全知道)数字,但是2000+开始发生这种情况)

我从主要软件中分离了TChart,并构建了一个片段以进行测试,这是我正在运行的简单代码:

procedure TdesktopForm.Button1Click(Sender: TObject);
var
  vBMP: TBitmap;
begin
  vBMP := TBitmap.Create();
  try
    config();
    c.series[0].AddY(StrToFloat(edit.text));
    c.PaintTo(vBMP.Canvas.Handle, 0, 0);
    vBMP.SaveToFile('D:\test.bmp');
  finally
    vBMP.Free();
  end;
end;

c是我在视觉上添加的TChart组件的地方,edit只是在视觉上TEdit来操纵我添加的内容,而config是一种方法使用以下代码在图形上配置视觉内容:

procedure TdesktopForm.config();
begin
  c.Height:=200;
  c.Width:=200;

  c.LeftAxis.LabelsFont.Size:=13;
  c.BottomAxis.LabelsFont.Size:=13;

  c.MarginBottom:=20;
  c.MarginTop:=10;
  c.LeftAxis.StartPosition:=10;
  c.LeftAxis.EndPosition:=90;
  c.BottomAxis.LabelsAngle:=0;
  c.BottomAxis.Grid.Color:=clBlack;
  c.LeftAxis.Grid.Color:=clBlack;
  c.BottomAxis.Ticks.Color:=clBlack;
  c.LeftAxis.Ticks.Color:=clBlack;
  c.LeftAxis.MinorTicks.Color:=clBlack;
  c.BottomAxis.MinorTicks.Color:=clBlack;
  c.BottomAxis.LabelsMultiLine:=True;
  c.BottomAxis.DateTimeFormat:='DD/MM/AAAA hh:mm:ss';
  c.BottomAxis.StartPosition:=10;
  c.BottomAxis.EndPosition:=90;
  c.View3D:=False;
  c.Color:= clWhite;
  c.Legend.Visible:=False;

  c.Series[0].Marks.Visible:=true;
  c.Series[0].Marks.Transparent:=false;
  c.Series[0].Marks.Style:= smsValue;
  c.Series[0].Marks.Frame.Visible:=True;
  c.Series[0].Marks.Frame.Color:=clBlack;
  c.Series[0].Marks.BackColor:=clWhite;
  c.Series[0].Marks.Font.Size:=12;
  c.Series[0].Marks.Font.Color:=clBlack;
end;

如果这还不足为奇,那么上面的所有测试都使用“线系列”,例如,如果我对Bar系列尝试相同的操作,则一切工作都完全正常,我尝试添加一些荒谬的值,例如999999999和没有提出错误。

以上所有操作均使用Delphi 5,因为我的主要软件基于Delphi 5构建。

有人知道发生了什么吗?

0 个答案:

没有答案