I've just worked on the problem a bit more. I
think it definitively needs tobe done by threading. The code looks kind of
like this:
procedure TForm1.Button1Click(Sender:
TObject);
var
m: TMoving;
x,y,angle:
integer;
begin
m := TMoving.Create;
m.ParentWindow :=
Handle;
ShowM(m); // makes the bitmap
visible
GetXY(x,y,angle); // gets the parameters from
another source
Move(x,y,angle,m,GetTickCount) // following
procedure..
end;
procedure TForm1.Move(x,y,angle: integer; M:
TMoving; time: integer);
begin
if time = GetTickCount then
begin
CalcXY(x,y,angle); // gets new
coordinates
UpdateM(M); // updates
bitmap coordinates
Move(x,y,angle,M,GetTickCount+2) // call
itself with new time
end else
Move(x,y,angle,M,time) // call itself with same
time
end;
So, until time = GetTickCount the procedure will
call itself. The trouble is that since my processor probably does a few
million jobs in one milliseconds, the procedure will be called so much that a
stack overflow will happen. The procedure will never get the chance to call
itself again in 2 ms.
This could be solved if the calling procedure
would be removed from the stack after the new one was called. How to do
this?
Reading the help file I found out that TThread
has something like activating on a signal, so this would probably be a better
solution. However, as I already mentioned, I don't know how to use threads.
:(
Gajo