我用以下代码冻结了我的应用程序,在Windows 64位上使用TChart TPointSeries。
为了重现这个问题,我已经尽可能多地简化了我的项目。我只有一个带有T按钮的表单和带有TPointSeries的TeeChart。在按钮OnClick事件上,我有以下代码:
{******************************************************************************}
procedure TForm2.btnTestClick(Sender: TObject);
var
X1, Y1, X2 : double ;
begin
X1 := 10.5 ;
Y1 := 289 ;
X2 := ( 10.5 * 9.81 * 821 ) / ( 821 * 9.81 ) ;
Series1.AddXY( X1, Y1 ) ;
Series1.AddXY( X2, Y1 ) ;
end;
{******************************************************************************}
这个问题只发生在为Windows 64位构建的项目中,Windows 32位的一切都很好。
如果我改变X2公式的值,或者用它的结果替换公式,问题就不会发生。
我需要让这个代码适用于X2公式的任何值,因为它是一个以公式成员为变量的工程软件的一部分。
有人能帮忙解决问题吗?
谢谢
我已经将其添加到公共跟踪器中:#2059。
这里有一个可能的解决方法:
Chart1.Axes.Bottom.Items.Automatic:=False;
Chart1.Axes.Bottom.Items.Clear;
Chart1.Axes.Bottom.Items.Add(X1, FormatFloat(Chart1.Axes.Bottom.AxisValuesFormat, X1));
Chart1.Axes.Bottom.Items.Add(X2, FormatFloat(Chart1.Axes.Bottom.AxisValuesFormat, X2));
Chart1.Axes.Bottom.SetMinMax(X1-0.5, X2+0.5);
感谢Yeray的解决方案,它运行良好。
由于我在最初的项目中有几个图表和同一图表上的几个系列,我编写了以下解决方法。我称之为"自动"状态的所有轴,至少有一个系列使用。这在任何情况下都能解决问题。
procedure ChartBug2059_Workaround( AAxis : TChartAxis ;
AAxisMin, AAxisMax : double ) ;
begin
if IsAEqB( AxisMin, AxisMax ) then
begin
AAxis.Automatic:=False;
AAxis.SetMinMax(AxisMin-0.5, AxisMax+0.5);
end
else
AAxis.Automatic:=true;
end;