我为写这么糟糕的标题而道歉,请你编辑一下,让其他人明白我的意思?我会解释:
我想在特定位置移动一个形状,例如从x:= 1000到x:= 600。 但是,如果我写:
shape1.left:=600;
它会将形状从1000(起始位置)移动到600,但我不希望它跳400mm,但首先转到992,然后是184,然后是176等,以便人们可以看到它实际上是移动。
我尝试使用命令(睡眠),但它没有用,也许它仍然跳400毫米:
Shape1.Left:=1000;
sleep (50);
shape1.Left:=992;
sleep (50);
...
...
由于
答案 0 :(得分:5)
不要在主线程中使用Sleep
。它会阻止你的应用程序GUI线程,这是一个严重的失误。
而是在表单上删除计时器。并编写一个这样的计时器处理程序:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Shape1.Left := Shape1.Left - 5;
end;
定时器事件处理程序定期执行。每次定时器勾选时,您都会更新形状的位置。
您可能希望将计时器间隔设置得非常低,以便动画显得平滑。例如,尝试100毫秒。
您可能还想在形状达到目标时禁用计时器。
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Shape1.Left := Shape1.Left - 5;
if Shape1.Left<=ShapeTargetLeft then
Timer1.Enabled := False;
end;