Marks.Item[nPoint].Visible 之后的 TeeChart CalcClickedPart 错误:=false

TeeChart CalcClickedPart Bug after Marks.Item[nPoint].Visible :=false

Delphi 10.1 Pro,带有嵌入式 Teechart 控件的 VCL。 CalcClickedPart 在标记设置为隐藏在之前显示的位置之后显示 cpSeriesMarks。

我可能没有正确删除标记,只是隐藏了它,或者 CalcClickedPart 中存在错误。请指教

我在左上角添加了一个 tLabel,它显示了 CalcClickedPart 零件结果。 还有一个按钮来切换标记可见性。

系列及标志创作:

procedure TForm2.FormCreate(Sender: TObject);
var i: Integer;
begin
  Chart1.View3D:=false;
  with Chart1.AddSeries(TLineSeries) as TLineSeries do
    begin
      for i := 0 to 9 do
        begin
          AddXY(i, 10);
          Marks.Item[i].Visible := false; // Hide all Marks
        end;

      Marks.Show; // A global Marks enabled.
      Marks.Item[5].Visible := true;
    end;
end;

CalcClickedPart 测试:

procedure TForm2.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var
  ClickedPart: tChartClickedPart;
  sCursorText: string;
begin
  sCursorText := '';

  Chart1.CalcClickedPart(Point(X, Y), ClickedPart); // Return information about the TeeChart component below the Mouse pointer at an X,Y location.
  Case ClickedPart.Part of
    cpNone          : sCursorText := 'cpNone';
    cpLegend        : sCursorText := 'cpLegend';
    cpAxis          : sCursorText := 'cpAxis';
    cpSeries        : sCursorText := 'cpSeries';
    cpTitle         : sCursorText := 'cpTitle';
    cpFoot          : sCursorText := 'cpFoot';
    cpChartRect     : sCursorText := 'cpChartRect';
    cpSeriesMarks   : sCursorText := 'cpSeriesMarks';
    cpSeriesPointer : sCursorText := 'cpSeriesPointer ';
    cpSubTitle      : sCursorText := 'cpSubTitle';
    cpSubFoot       : sCursorText := 'cpSubFoot';
    cpAxisTitle     : sCursorText := 'cpAxisTitle';
  end;

  Label1.Caption := sCursorText;
end;

标记可见性切换:

procedure TForm2.btnMarksToggleClick(Sender: TObject);
begin
  with (Chart1[0] as tLineSeries).Marks.Item[5] do
    Visible := not Visible;
end;

Marks is visible. A correct cpSeriesMarks (cursor in Red arrow):

按下按钮隐藏标记。会得到如下错误的CalcClickedPart。 Marks is NOT visible. An incorrect cpSeriesMarks (cursor in Red arrow):

你有什么解决办法吗?

p.s 我之前在 CalcVisiblePoints := false 时发现了 CalcClickedPart 的错误。 这是另一个问题,与 CalcVisiblePoints 完全无关。

谢谢 雷伦

我已经能够在此处重现该问题,因此我已将其添加到 public 跟踪器 (#2092)。

注意问题出在 TSeriesMarks.Clicked 函数。
我已经为下一个版本修复了它。

作为解决方法,您可以设置 Positions.Item[5]:=nil:

procedure TForm2.btnMarksToggleClick(Sender: TObject);
const aMarksIndex = 5;
begin
  with (Chart1[0] as tLineSeries).Marks do
  begin
    with Item[aMarksIndex] do
      Visible := not Visible;

    if not Item[aMarksIndex].Visible then
       Positions.Items[aMarksIndex]:=nil;
  end;
end;