我建了一个PaintBox,并在PaintBox.Canvas.CopyRect中高速更换图片(每秒更换5次),以达到动画的效果。但是在更换图片的过程中,PaintBox时不时会一闪一闪的,真叫人难受!!请问要怎么办才能解决这个问题呢?望请指点,万分感激!!!

解决方案 »

  1.   

    试试 PaintBox1.Parent.DoubleBuffered := True;
      

  2.   

    PaintBox跟Parent.DoubleBuffered的设置是无关的。不行啊。。
      

  3.   

    delphi5一直存在这个问题,好象delphi7里面这个问题得到了解决,总而言之就是在paint消息响应的时候delphi5调用了一个重绘背景的过程,不只是paintbox,包括image等图象控件都有这个现象,除非你派生一个控件,去掉他的重绘过程,或者使用form的canvas的draw过程,我也希望你解决后告诉我一下。顺便问以下,怎样才能在里面发帖子。哎!
      

  4.   

    没办法的, vcl都这样, 不仅是Timage, 你试试移动一个Tbutton, 也会出现这种情况的.
    原因是只有一层显示页是不够的, 至少要两层才能进行动画, 显示一页的同时, 在内存中绘制下一页. 然后交替...
    通过TCanvas的编程可以实现, 不过比较麻烦. 不要试图在TTimer中加入诸如inc(button1.left)这样的命令, 那样肯定会闪的.
    我建议你使用DelphiX控件, 它可以很方便的实现动画, 封装了许多DirectX函数, 可以说是有些大材小用了. 但无论是从效果上还是从方便程度上, 他都比TCanvas编程好.
      

  5.   

    zhangfuren(zhangfuren)
    请问你的这句“顺便问以下,怎样才能在里面发帖子。”是什么意思啊,不是说怎么样子才能在这里发帖吗?你不是发了吗?
    delphi7真的可以解决这个闪耀问题吗?(我到现在还没有使用过delphi7)谢谢zousoft(凶狠汤) ,看来这个问题真是没戏了。
      

  6.   

    就是提出问题,我已经找到了.谢谢关注.
     我在一个form里画70多个图片,使用canvas的draw一点问题都没有,但是使用image就是闪,
     你在派生空间的时候controlstyle 中去掉[csopaque]试一试
      

  7.   

    用draw可以闪得少一些,但必竟还是会闪啊!
    至于“controlstyle”我稍后去研究一下子,谢谢您了!