2013-03-15 2 views
1

У меня есть простая диаграмма, использующая только TLineSeries с одной осью Y. Когда указатель мыши перемещается по диаграмме, я хотел бы получить значения X и Y, связанные с позицией указателя, независимо от каких-либо серий.Получить значения X и Y под указателем мыши

Я могу обработать событие MouseMove и получить координаты экрана X и Y, но единственный способ, которым я нашел преобразование, - это методы Series-> XValues-> Locate и Series-> YValue-> Locate.

Есть две проблемы:

1 - Значение, возвращенное из Series-> YValue-> Расположить всегда -1 независимо от того, является ли указатель на серии линию или нет.

2 - Значение, возвращаемое из серии-> XValue-> Locate, равно -1, если указатель не находится над частью диаграммы, содержащей серию строк.

Почему Series-> YValue-> Locate всегда возвращает -1?

Что еще более важно, как я могу получить значения независимо от того, находится ли указатель над частью графика с последовательными линиями или нет?

Я использую версию TeeChart, которая поставляется с Rad Studio XE3.

ответ

2

Почему 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; 

 Смежные вопросы

  • Нет связанных вопросов^_^