gpt4 book ai didi

delphi - TeeChart 系列 OnMouseEnter 事件

转载 作者:行者123 更新时间:2023-12-01 22:37:23 25 4
gpt4 key购买 nike

我使用的是 Rad Studio XE3 附带的 TeeChart 版本。

TeeChart 提供了一个 TChartSeries 事件,当鼠标指针移动到系列线上时会触发该事件。我使用此事件在指针下显示系列名称。

问题是,给定一条 1 像素宽的系列线,很难让指针恰好位于该线上。是否有某种方法可以向事件添加“填充”,以便它向线条的每一侧发射 X 个像素?

或者还有其他方法可以实现这一点吗?

最佳答案

我正在向 Line (TLineSeries) 和 FastLine (TFastLineSeries) 类添加一个新属性来完成此任务。

Series1.ClickTolerance := 4;   // <-- number of pixels around mouse XY

默认值为零(鼠标 XY 应该正好位于该线上),就像当前的行为一样。

作为解决方法,如果您使用 TLineSeries,指针可以显示在行点位置,并且内部“clicked”函数将考虑指针大小:

Series1.Pointer.Visible:=True;

对于更多自定义控制,下面的代码与用于检测鼠标点击的内部代码非常相似。容差常量指定要考虑“在线”的额外像素数。

procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);

const
Tolerance=4;

var Clicked,
t : Integer;
Position,
P,Old : TPoint;
begin
Clicked:= -1;

Position.X:=X;
Position.Y:=Y;

for t:=Series1.FirstValueIndex to Series1.LastValueIndex do
begin
P.X:=Series1.CalcXPos(t);
P.Y:=Series1.CalcYPos(t);

if t>Series1.FirstValueIndex then
if PointInLine(Position,P.X,P.Y,Old.X,Old.Y,Tolerance) then
begin
Clicked:=t;
break;
end;

Old:=P;
end;

if Clicked = -1 then
Caption:=''
else
Caption:=IntToStr(Clicked);
end;

关于delphi - TeeChart 系列 OnMouseEnter 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15616516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com