![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день.
Работаю на 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
|
|||
|
|||
![]() вот что хотелось бы нарисовать в итоге... Изменяя масштаб или двигая график - стрелки тоже должны двигаться..держа свою точку. Спасибо. |
|
#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; |