-3

我为写了这么糟糕的标题而道歉,请您编辑它以便其他人理解我的意思吗?我会解释:

我想将形状移动到特定位置,例如从 x:=1000 移动到 x:=600。但是,如果我写:

shape1.left:=600;

它将形状从 1000(起始位置)移动到 600,但我不希望它跳 400mm,而是先跳到 992,然后是 184,然后是 176 等,这样人们就可以看到它实际上是在移动。

我试过用命令(sleep),但是没用,可能还是跳了400mm:

Shape1.Left:=1000;
sleep (50);
shape1.Left:=992;
sleep (50);
...
...

谢谢

4

1 回答 1

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;
于 2013-04-17T19:33:28.633 回答