was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews
 sonstiges ¦  tutorials ¦  Add&Win Gewinnspiel

Tips (1541)

Dateien (137)
Datenbanken (90)
Drucken (35)
Grafik (114)
IDE (21)
Indy (5)
Internet / LAN (130)
IntraWeb (0)
Mathematik (76)
Multimedia (45)
Oberfläche (107)
Objekte/
ActiveX (51)

OpenTools API (3)
Sonstiges (126)
Strings (83)
System (266)
VCL (242)

Tips sortiert nach
Komponente


Tip suchen

Tip hinzufügen

Add&Win Gewinnspiel

Werbung

169 Visitors Online


 
...überprüfen, ob sich der Maus-Cursor auf einer Linie befindet?
Autor: Johannes Steiner
[ Tip ausdrucken ]  

Tip Bewertung (11):  
     




{
  Check if a Point(X,Y) (e.g a Cursor) is on a Linie (x1,y1) ; (x2,y2)
  d = line width (min. 1)

  Testen, ob sich der Punkt(X,Y) (z.B der Maus-Cursor) auf der Linie x1,y1 nach x2,y2 befindet.
  d = halbe Liniendicke (min 1)
  durch direkte Programmierung der FPU wird die Unit Math nicht benötigt
  nur mit 80387 oder höher einsetzbar!
}

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;


 

Bewerten Sie diesen Tipp:

dürftig
ausgezeichnet


Copyright © by SwissDelphiCenter.ch
All trademarks are the sole property of their respective owners