我需要在Delphi 10中创建一个图表,其中可以使用鼠标更改Series的值。我想用鼠标光标按下图表的值并拖动以更改其值。是否有任何需要启用的属性或是否具有特定的图表组件?
I saw another similar question,如@KenWhite所示,但我不明白,因为在该主题中使用了C#,而TeeChart组件在Delphi中的工作方式不同。
有人可以解释一下如何在Delphi中使用它吗?
感谢
答案 0 :(得分:3)
拖动的简单示例。
我将图表AllowPanning设置为False以自由地使用鼠标右键,线条系列,点样式是大小= 4的圆圈,并通过简单的列表遍历寻找触摸点(不确定Std是否有方法可以获得离光标最近的点)。
也许您需要一些限制(例如,通过邻居值限制水平移位等)
DragIdx: integer = -1;
procedure TForm1.Button18Click(Sender: TObject);
var
i: Integer;
begin
for i := 0 to 19 do
Series1.AddXY(i, Sin(i/2));
end;
procedure TForm1.Chart1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
i, xx, yy: Integer;
begin
if Button = mbRight then begin
DragIdx := -1;
for i := 0 to Series1.Count - 1 do begin
xx := Series1.CalcXPos(i);
yy := Series1.CalcYPos(i);
if Sqr(xx - x) + Sqr(yy - y) <= 5 * 5 then begin
DragIdx := i;
Break;
end;
end;
Memo1.Lines.Add(Format('grab %d', [DragIdx]));
end;
end;
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
xx, yy: Double;
begin
if (ssRight in Shift) and (DragIdx >=0) then begin
Series1.GetCursorValues(xx, yy);
Memo1.Lines.Add(Format('change %d to %f %f', [DragIdx, xx, yy]));
Series1.XValues[DragIdx] := xx;
Series1.YValues[DragIdx] := yy;
Chart1.Repaint;
end;
end;