使用Delphi XE2我想让一些按钮在delphi应用程序中移动。delphi中的双缓冲区
我写了这个代码:
procedure TForm1.DoSomething;
var x : integer;
begin
for x := 200 downto 139 do begin
// move two buttons
Button1.Top := x;
Button3.Top := x;
// skip some repaints to reduce flickering
if (x mod 7 = 1) then begin
Form1.Repaint;
Sleep(50);
end;
end;
不幸的是运行此程序时,它仍然显著闪烁。
这里是我的问题: 有什么办法可以使动画平滑(没有任何闪烁)?
编辑: 为了使动画更加流畅,改变50的东西在睡眠(50)更小,并删除这一行:
if(x mod 7 = 1) then begin
如此强大的财产。谢谢,我会在10分钟后以接受的方式打勾 –
是的,但一个财产很容易导致令人讨厌的视觉怪癖。 –
@DavidHeffernan绝对是不错的选择,如果你可以在没有使用双缓冲的情况下找到重绘闪烁的方法,那么试着去做。从我自己的经验,并如大卫指出,双缓冲往往导致一些视觉问题,如按钮周围的黑边等。 – 2012-12-07 19:49:01