【问题标题】:teechart freeze on Windows X64Windows X64 上的 teechart 冻结
【发布时间】:2018-07-16 16:02:59
【问题描述】:

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

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

有人可以帮忙解决吗?

谢谢

【问题讨论】:

  • 通常情况下,这是因为项目中使用了一些 32 位的 package/lib。你检查了吗?

标签: teechart delphi-10.1-berlin


【解决方案1】:

我已将其添加到公共跟踪器:#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);

【讨论】:

    【解决方案2】:

    感谢 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多