Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Проверить, находится ли курсор на линии

01.01.2007
{ 
 
Check if a Point(X,Y) (e.g a Cursor) is on a Linie (x1,y1) ; (x2,y2)
  d
= line width (min. 1)
 
}
 
 
function CursorOnLinie(X, Y, x1, y1, x2, y2, d: Integer): Boolean;
 
var
   sine
, cosinus: Double;
   dx
, dy, len: Integer;
 
begin
   
if d = 0 then d := 1;
   
asm
     fild
(y2)
     fisub
(y1) // Y-Difference
    fild
(x2)
     fisub
(x1) // X-Difference
    fpatan    
// Angle of the line in st(0)
    fsincos  
// Cosinus in st(0), Sinus in st(1)
    fstp cosinus
     fstp sine
   
end;
   dx  
:= Round(cosinus * (x - x1) + sine * (y - y1));
   dy  
:= Round(cosinus * (y - y1) - sine * (x - x1));
   len
:= Round(cosinus * (x2 - x1) + sine * (y2 - y1)); // length of line
 
if (dy > -d) and (dy < d) and (dx > -d) and (dx < len + d) then Result := True
   
else
     
Result := False;
 
end;
 
 procedure TForm1
.FormPaint(Sender: TObject);
 
begin
   
Canvas.Pen.Width := 1;
   
Canvas.MoveTo(0, 0);
   
Canvas.LineTo(Width, Weight);
 
end;
 
 procedure TForm1
.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
   Y
: Integer);
 
var
   p
: TPoint;
 
begin
   
GetCursorPos(p);
   p
:= ScreenToClient(p);
   
if CursorOnLinie(p.x, p.y, 0, 0, Width, Height, 1) then
     
Caption := 'Mouse on line.'
   
else
     
Caption := 'Mouse not on line.'
 
end;

Взято с сайта: https://www.swissdelphicenter.ch