um das mal ganz einfach (ohne sonderfälle zu berücksichtigen) in code zu fassen (muss natürlich noch optimiert werden):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
dx,dy:integer;
v:double;
ps,pz:TPoint;
begin
ps:=Point(10,10); //ball soll von da
pz:=Point(100,200); //nach da
//den weg als linie vorzeichnen
canvas.moveto(ps.x,ps.y);
canvas.lineto(pz.x,pz.y);
shape1.SetBounds(ps.x,ps.y,10,10);//die startposition und größe des Shapes setzen
sleep(1000);//einfach mal warten, um den startpunkt in ruhe zu betrachten
//deltas berechnen
dx:=pz.x-ps.x;
dy:=pz.y-ps.y;
if dx>dy then
begin
v:=dy/dx; //verhältnis berechnen
for i:=1 to dx do
begin
//neu positionieren
shape1.left:=ps.x+i;
shape1.Top:=ps.y+trunc(i*v);
application.ProcessMessages;
sleep(20); //damit die bewegung bisschen langsamer wird...
end;
end else
begin
v:=dx/dy; //verhältnis berechnen
for i:=0 to dy do
begin
//neu positionieren
shape1.top:=ps.y+i;
shape1.Left:=ps.x+trunc(i*v);
application.ProcessMessages;
sleep(20); //damit die bewegung bisschen langsamer wird...
end;
end;
end;
HTH Frank