Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.05.2013, 13:17
-=#PupaJr#=- -=#PupaJr#=- вне форума
Новичок
 
Регистрация: 17.08.2010
Сообщения: 74
Репутация: 518
По умолчанию Tchart и CalcXPosValue по шкале времени

Добрый день.
Работаю на D6.
Вот так получаю координаты по осям температуры (Y) и по оси времени (X), xx и yy глобальные:
Код:
procedure TForm4.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 chart1.SetFocus;
 xx:= timetostr(Chart1.Series[1].xScreenToValue(x));
 yy:= floattostrf(Chart1.Series[1].YScreenToValue(y),ffFixed,6,2);
 Edit3.Text:=datetostr(Chart1.Series[1].xScreenToValue(x));       //   Выводим данные под мышой
 Edit4.Text:=xx;       // сохраняю и отображаю
 Edit5.Text:=yy;       //

end;

работает нормально, но код ниже нет - не даёт мне обратно точку на канвасе по шкале времени Х - выдаёт всегда х0=-213677436, а по Y нормально:
Код:
procedure TForm4.Chart1DblClick(Sender: TObject);
var x0,y0,x1,y1:integer;
begin
chart1.Canvas.Pen.Color:=clblue;
chart1.Canvas.Brush.Color:=clblue;
x0:=chart1.BottomAxis.CalcXPosValue(strtotime(xx)); //получаю из глобальных
y0:=chart1.LeftAxis.CalcYPosValue(strtofloat(yy));      // значения под мышью
x1:=x0+2;
y1:=x0+2;
x0:=x0-2;
y0:=y0-2;
 if (RadioGroup2.ItemIndex=0)and (RadioGroup2.Tag=0) then
   begin
    Edit1.Text:=xx;
    chart1.Canvas.Rectangle(x0,y0,x1,y1);
    RadioGroup2.Tag:=1;
    Edit1.SetFocus;
    exit;
   end;
.......

А изначально задача простая - рисовать на графике точку-метку, для индикации начала отсчёта (визуального), потом при анализе графика брать данные со шкалы времени (Х) и отсюда уже считать данные по сериям, при этом надо сохранить позицию точки относительно серии при перемещении по экрану и масштабировании серий (должна перемещаться вместе с сериями).
В чём косяк? Сама шкала отображается нормально в чч:мм:сс.
Ответить с цитированием
  #2  
Старый 07.05.2013, 18:43
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

Цитата:
chart1.BottomAxis.CalcXPosValue(strtotime(xx)); //получаю из глобальных
а если попробовать
Код:
Series1.CalcXPosValue(strtotime(xx)); 
Ответить с цитированием
  #3  
Старый 08.05.2013, 07:52
-=#PupaJr#=- -=#PupaJr#=- вне форума
Новичок
 
Регистрация: 17.08.2010
Сообщения: 74
Репутация: 518
По умолчанию

Пробывал через серии - тоже выдаёт отрицатеное большое число - такое ощущение что просто не работает он со шкалой типа "время", при чём отрицательное число чуток меняется при смене координаты...
Ответить с цитированием
  #4  
Старый 29.05.2013, 08:14
-=#PupaJr#=- -=#PupaJr#=- вне форума
Новичок
 
Регистрация: 17.08.2010
Сообщения: 74
Репутация: 518
По умолчанию Tchart и свои стрелки на нём



вот что хотелось бы нарисовать в итоге...
Изменяя масштаб или двигая график - стрелки тоже должны двигаться..держа свою точку.
Спасибо.
Ответить с цитированием
  #5  
Старый 04.06.2013, 17:26
-=#PupaJr#=- -=#PupaJr#=- вне форума
Новичок
 
Регистрация: 17.08.2010
Сообщения: 74
Репутация: 518
По умолчанию

Вот сделал сам
нахожу точку и рисую, а в afterdraw просто повторяю проделаную здесь процедуру
Код:
 xi:=0;
 yi:=0;
 j:=-1+strtoint(form1.Edit18.Text);       // берём индекс КТК
 zn:=0;
 tmpx:=strtotime(xx);    //получили значение с экрана под мышью
 tmpy:=strtofloat(yy);    //получили значение с экрана под мышью
 for i:=0 to chart1.Series[j].XValues.Count-1 do                  //перебераю точки в КТК
   begin
     aaa:=chart1.Series[j].XValue[i];                // где ближайшая первая есть по значению
     strtt:=timetostr(aaa);
     aaa:=strtotime(strtt);
     if (tmpX<=aaa)and(zn=2) then
       begin
        xi:=i-1;
        zn:=3
       end;
     if (tmpX>=aaa)and (zn=0) then zn:=2;
   end;
 tx0:=Chart1.BottomAxis.CalcXPosValue(chart1.Series[j].XValue[xi]);
 zn:=0;
 for i:=0 to chart1.Series[j].YValues.Count-1 do
   begin
     aaa:=chart1.Series[j].YValue[i];
     if (tmpY>=aaa) then zn:=2;
     if (tmpY<=aaa)and(zn=2) then
       begin
        yi:=i;
        zn:=3
       end;
   end;
 ty0:=Chart1.leftAxis.CalcYPosValue(chart1.Series[j].YValue[yi]);
 tx1:=tx0+2;
 ty1:=ty0+2;
 tx0:=tx0-2;
 ty0:=ty0-2;
 point.Left:=tx0;
 point.Top:=ty0;
 point.Right:=tx1;
 point.Bottom:=ty1;
 chart1.Canvas.Brush. Color:=clblue;
 chart1.Canvas.Pen.Color:=clblue;
вопрос решён )
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:26.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter