1

単一のY軸を持つTLineSeriesのみを使用した単純なチャートがあります。マウスポインタがチャート上を移動するときに、シリーズに関係なく、ポインタの位置に関連付けられたX値とY値を取得したいと思います。

MouseMoveイベントを処理して、画面のX座標とY座標を取得できますが、それらを変換する唯一の方法は、Series->XValues->LocateおよびSeries->YValue->Locateメソッドを使用することです。

これには2つの問題があります。

1-ポインタがシリーズライン上にあるかどうかに関係なく、Series->YValue->Locateから返される値は常に-1です。

2 –ポインタが系列線を含むチャートの一部の上にない限り、Series->XValue->Locateから返される値は-1です。

Series-> YValue-> Locateが常に-1を返すのはなぜですか?

さらに重要なことに、ポインターが系列線のあるチャートの一部にあるかどうかに関係なく、どのように値を取得できますか?

RadStudioXE3に付属しているバージョンのTeeChartを使用しています。

4

1 に答える 1

3

Series-> YValue-> Locateが常に-1を返すのはなぜですか?

これは、 Locateがシリーズ値を使用し、シリーズ内のポイントインデックスを返すためです。OnMouseMoveは、系列値ではなく、画面のピクセル座標を提供します。

さらに重要なことに、ポインターが系列線のあるチャートの一部にあるかどうかに関係なく、どのように値を取得できますか?

系列の代わりに軸を参照として使用できます。次に例を示します。

procedure TForm2.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  XVal: double;
  YVal: double;
begin
  XVal:=Chart1.Axes.Bottom.CalcPosPoint(X);
  YVal:=Chart1.Axes.Left.CalcPosPoint(Y);

  Chart1.Title.Text[0]:=FormatFloat('#.##', XVal) + ' - ' + FormatFloat('#.##', YVal);
end;
于 2013-03-18T12:33:53.777 に答える