Delphi - 如何移动控件并刷新它

时间:2010-12-16 14:37:56

标签: delphi

对于Delphi中的编程练习,我希望一次在屏幕上滚动一个像素,并在每次移动时重新绘制它,所以看起来它实际上正在移动。目前Delphi只是在开始和结束时绘制它,所以它并不顺畅。我尝试了重绘和刷新,但都没有奏效。我也尝试让它变得可见和不可见,看看它是否有用,但没有运气。

image1.Visible := true;
for i := 0 to 50 do
begin
   image1.Visible := false;
   image1.Left := image1.Left + 1;
   image1.Repaint(); // this doesn't work...
   for j := 0 to 1000000 do
   begin
      k := i + j; // do nothing code
   end; 
   image1.Visible := true;
end;

有谁知道我错过了什么?感谢。

2 个答案:

答案 0 :(得分:5)

更好的方法是使用计时器。在Delphi中,这意味着类TTimer的对象。每次计时器触发时,只需增加Left属性。您可能想要一个计数器,一旦它被激发多次就会禁用计时器。

答案 1 :(得分:4)

procedure TForm1.FormClick(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to 50 do
  begin
    image1.Left := image1.Left + 1;
    Application.ProcessMessages;
    sleep(100);
  end;
end;

您也可以Image1.Update而不是Application.ProcessMessages,但应用程序将停止响应Windows消息;因此,它会“冻结”。无论如何,这是一个非常丑陋的动画制作方式(非常难看!),但如果它只是一个练习,那么......