对于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;
有谁知道我错过了什么?感谢。
答案 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消息;因此,它会“冻结”。无论如何,这是一个非常丑陋的动画制作方式(非常难看!),但如果它只是一个练习,那么......