How can I get series index from cursor position when I click TChart?

Thank you.

有帮助吗?

解决方案

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);

其他提示

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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top