我使用以下代码冻结了我的应用程序,并在Windows 64位上使用了TChart TPointSeries。
我已尽可能简化项目以重现该问题。 我只有带有 TButton 的表单和带有 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公式的任何值,因为它是工程软件的一部分,其中公式成员为变量。
有人可以提供解决方案吗?
谢谢
答案 0 :(得分:0)
我已将其添加到公共跟踪器中:#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);
答案 1 :(得分:0)
谢谢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;