Windows X64 上的 teechart 冻结

teechart freeze on Windows X64

我使用以下代码冻结了我的应用程序,TChart TPointSeries 在 Windows 64 位上。

我已尽可能简化我的项目以重现该问题。 我只有一个 form 和一个 TButton 和一个 TeeChart 和一个 TPointSeries。在按钮 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 公式的任何值,因为它是将公式成员作为变量的工程软件的一部分。

有人可以帮忙解决吗?

谢谢

我已将它添加到 public 跟踪器:#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;