我正在尝试使用TChart组件将图形导出到位图文件,但出现了一个非常奇怪的错误。
每次我尝试向图表添加一个值时,我都会从AddY
组件中调用TLineSeries
函数,并将该值作为参数传递。当我尝试添加较小的值时,该图的行为完全正常,如下所示:
当我尝试在第一时间添加一些大价值时,就会发生问题,我会遇到如下访问冲突:
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文件的“结尾”。
由于我对这些错误不够熟练,因此我无法准确调试正在发生的事情,我认为它有点损坏的堆,但由于代码是非常简单,并且该组件隐藏了代码,因为它是第三方组件。
有趣的是,如果我单击确定直到错误消失并添加另一个值,它将正常显示,以及先添加一些小值,然后添加一个大值(大体上我不完全知道)数字,但是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构建。
有人知道发生了什么吗?