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;
我使用以下代码冻结了我的应用程序,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;