|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
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
|
|||
|
|||
Цитата:
Код:
Series1.CalcXPosValue(strtotime(xx)); |
#3
|
|||
|
|||
Пробывал через серии - тоже выдаёт отрицатеное большое число - такое ощущение что просто не работает он со шкалой типа "время", при чём отрицательное число чуток меняется при смене координаты...
|
#4
|
|||
|
|||
Tchart и свои стрелки на нём
вот что хотелось бы нарисовать в итоге... Изменяя масштаб или двигая график - стрелки тоже должны двигаться..держа свою точку. Спасибо. |
#5
|
|||
|
|||
Вот сделал сам
нахожу точку и рисую, а в 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; |