Delphi 10.1 Pro, VCL со встроенными элементами управления Teechart.
У меня есть серия Line с большим количеством точек, намного больше, чем разрешение экрана.
Я также использую Marks.
Чтобы метки всегда были видны, для CalcVisiblePoints установлено значение false.
Однако это вызывает некорректное поведение CalcClickedPart в событии Chart1MouseMove.
Я добавил tLabel в верхнем левом углу, который показывает результат части CalcClickedPart.
Курсор находится вне графика, отмечен вертикальной КРАСНОЙ стрелкой на следующем изображении:
Часть: cpNone , как и ожидалось.
Проблема возникает после панорамирования / прокрутки графика (вправо в следующем примере).
Курсор, как и прежде, находится справа от самого чата.
На этот раз сообщаемая часть - cpSeriesPointer , что неверно.
Легенда также выбрана, что также неверно.
![embedded image](https://i.stack.imgur.com/aiPmn.png)
Создание серии выглядит следующим образом:
procedure TForm2.FormCreate(Sender: TObject);
var i: Integer;
begin
// Chart setting
Chart1.View3D:=false;
Chart1.Legend.Visible := true;
Chart1.Legend.CheckBoxes := true;
// Left Axis
Chart1.Axes.Left.Automatic:= false;
Chart1.Axes.Left.Minimum := 0;
Chart1.Axes.Left.Maximum := 20;
// Adding a Line Series
with Chart1.AddSeries(TLineSeries) as TLineSeries do
begin
for i := 1 to 1000 do
AddXY(i, 10);
CalcVisiblePoints := false; // <- THE Problematic property
Pen.Width:= 3;
end;
end;
Событие Chart1MouseMove:
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;
Есть идеи, как обойтись?
Спасибо
Reron