// Die foldende Routine prüft, ob sich ein Punkt innerhalb
// oder außerhalb einer Ellipse befindet. Im Beispiel wird
// getestet, ob sich die Maus über eine auf Form1 gezeichnete
// Ellipse bewegt oder nicht.
// Siehe dazu auch
Testen, ob sich ein Punkt in einem Polygon befindet

// Getestet mit D4 unter WinME

var 
x1,x2,y1,y2,a,b,a2,b2,ab,mx,my:integer; 
 
procedure TForm1.FormPaint(Sender: TObject); 
begin 
canvas.ellipse(x1,y1,x2,y2); 
end; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
x1:=50; 
y1:=50; 
x2:=300; 
y2:=100; 
a:=round((x2-x1)/2); 
b:=round((y2-y1)/2); 
a2:=sqr(a); 
b2:=sqr(b); 
ab:=a2*b2; 
mx:=x1+a; 
my:=y1+b; 
label1.caption:=''; 
end; 
 
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, 
Y: Integer); 
begin 
if b2*sqr(mx-x)+a2*sqr(my-y)<=ab then 
label1.caption:='drin' else label1.caption:='draußen'; 
end;




// Falls man nur Kreise (als Sonderform der Ellipse) abprüfen will,
// kann man natürlich die eben beschriebene Routine ebenfalls
// benutzen, man kann aber den Code auch geringfügig vereinfachen:

var 
x1,x2,y1,y2,mx,my,rd:integer; 
 
procedure TForm1.FormPaint(Sender: TObject); 
begin 
canvas.ellipse(x1,y1,x2,y2); 
end; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
x1:=50; 
y1:=50; 
x2:=150; 
y2:=150; 
rd:=round((x2-x1)/2); 
mx:=x1+rd; 
my:=y1+rd; 
label1.caption:=''; 
end; 
 
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, 
Y: Integer); 
begin 
if sqr(mx-x)+sqr(my-y)<sqr(rd) then 
label1.caption:='drin' else label1.caption:='draußen'; 
end;

 


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke