TeeChart CalcClickedPart Bug after Marks.Item[nPoint].Visibl



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;

计算点击部件测试:

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;

标记可见。正确的 cpSeriesMarks(红色箭头中的光标(:

按下按钮隐藏标记。将得到以下错误的计算点击部分。 标记不可见。不正确的 cpSeriesMarks(光标位于红色箭头中(:

你有什么变通办法吗?

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

谢谢 雷龙

我已经能够在这里重现这个问题,所以我已将其添加到公共跟踪器 (#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;

相关内容

  • 没有找到相关文章

最新更新