问题
How can I get series index from cursor position when I click TChart?
Thank you.
回答1:
From your clicked event, you will get the X,Y
mouse position.
var
SeriesIndex: Integer;
begin
SeriesIndex := Series1.Clicked(X,Y);
if (SeriesIndex <> -1) then
begin
// Do something with SeriesIndex
end;
...
end;
It is also possible to assign an OnClickSeries
event to the chart.
procedure TForm1.Chart1ClickSeries(Sender: TCustomChart;
Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
回答2:
The Series' Clicked(X,Y) function returns -1 if the series isn't under the (X,Y) position (in pixels). If the series is under the (X,Y) position (in pixels), it returns the index of the point under the series.
Here you have a simple example using the OnMouseMove event:
uses Series;
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
Chart1.View3D:=false;
for i:=0 to 2 do
Chart1.AddSeries(TBarSeries).FillSampleValues(3);
end;
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var seriesIndex, valueIndex: Integer;
begin
Caption:='No series under the mouse';
for seriesIndex:=Chart1.SeriesCount-1 downto 0 do
begin
valueIndex:=Chart1[seriesIndex].Clicked(X,Y);
if valueIndex>-1 then
Caption:='Series under the mouse. SeriesIndex: ' + IntToStr(seriesIndex) + ', ValueIndex: ' + IntToStr(valueIndex);
end;
end;
来源:https://stackoverflow.com/questions/20772070/get-series-index-under-cursor-when-tchart-is-clicked