Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2012, 20:53   #1
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию Получить значение графика под курсором

Есть Chart, заполненный двумя графиками lnsrsSeries1 и lnsrsSeries2. Хотелось бы научиться получать значения конкретной точки графика, когда курсор находиться по вертикали в пределах этого графика...
Пока только нашел, рисование вертикальной линии, и вывод значения под курсором в целом, а не значения только на линии графика (т.е. если я перемещаю курсор выше графика, то значения меняют, а надо, чтобы оставалось значение самого графика). Вот мой код (точнее не мой, а где-то стыреный) рисования вертикальной линии и получения значений под курсором:
Код:
procedure TForm1.cht1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  Procedure DrawCross(AX,AY:Integer);
  begin
    With Cht1,Canvas do
    begin
      Pen.Color:=clRed;
      Pen.Style:=psSolid;
      Pen.Mode:=pmXor;
      Pen.Width:=1;
      MoveTo(ax,ChartRect.Top-Height3D);
      LineTo(ax,ChartRect.Bottom-Height3D);
    end;
  end;

Var tmpX,tmpY:Double;
begin
  if (OldX<>-1) then
  begin
    DrawCross(OldX,OldY);
    OldX:=-1;
  end;

  if PtInRect( Cht1.ChartRect, Point(X-Cht1.Width3D,Y+Cht1.Height3D)  ) then
  begin
    DrawCross(x,y);
    OldX:=x;
    OldY:=y;
    With lnsrsSeries1 do
    begin
      GetCursorValues(tmpX,tmpY);
      Form1.Caption:=GetVertAxis.LabelValue(tmpY);
    end;
  end;

end;
Если кто разбирается, помогите пожалуйста. Очень надо получить значение в точке пересечения вертикальной линии и самого графика. Если совсем непонятно объясняю, то вот пример подобного графика: http://klavostat.ru/graph.php
Никогда не знаешь, где тебе повезет... (Фрай)

Последний раз редактировалось DIgorevich; 26.04.2012 в 20:55.
DIgorevich вне форума Ответить с цитированием
Старый 26.04.2012, 23:12   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

tmpX есть
Есть значения функции в ближайщих слева и справа точках
Методом линейной интерполяции вычисляем значение в tmpX

Если функция аналитическая, то просто вычислять значение в tmpX
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 26.04.2012 в 23:16.
Аватар вне форума Ответить с цитированием
Старый 26.04.2012, 23:15   #3
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Аватар, или я чего-то не понял... в общем не то, tmpX показывает какие-то фантастические значения, совсем не те, которые могут быть на графике. А как получить значения в ближайших точках я не знаю.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 26.04.2012, 23:27   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

tmpX показывает x-координату
Данные для графика откуда-то берутся. И x1 ближайшая слева точка с известным значением y1, x2 ближайшая справа точка с известным значением y2.

y=((tmpX-x1)*(y2-y1)/(x2-x1))+y1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.04.2012, 00:01   #5
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Аватар, если бы я умел получить ближайшую слева и справа точки с изветными значениями, я бы не создавал эту тему. График-то уже заполнен. И он может быть увеличен в масштабе, и вот эти y1 и х1 я не знаю как выдирать из этого графика.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 27.04.2012, 00:23   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Так можно поиграться, ток у меня ошибка будет, если if сработает для i=0 (нужно подправить)
Код:
  With lnsrsSeries1 do begin
    GetCursorValues(tmpX,tmpY);
    for i:=0 to XValues.Count-1 do
      if XValues.Value[i]>=tmpX then begin
        Label1.Caption:=FloatToStr((tmpX-XValues.Value[i-1])*
                                   (YValues.Value[i]-YValues.Value[i-1])/
                                   (XValues.Value[i]-XValues.Value[i-1])+YValues.Value[i-1]);
        Break;
      end;
  end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.04.2012, 09:32   #7
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Аватар, спасибо, проблема решена)
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление строки под курсором!! daredevilok Общие вопросы C/C++ 1 11.11.2011 13:59
Определение объекта под курсором woodsnake Qt и кроссплатформенное программирование С/С++ 6 15.08.2011 13:34
Слово под курсором Vikenty Общие вопросы Delphi 4 12.04.2011 23:58
пропадает значение в ячейке под курсором sdidenko07 Microsoft Office Excel 0 05.07.2010 21:45
окно под курсором mrandrey Win Api 1 11.05.2007 18:30