试试双缓冲吧。
DoubleBuffered := True;

解决方案 »

  1.   

    DoubledBuffered是wincontrol的属性,Timage没有这个属性
      

  2.   

    用paintbox就不会闪,这根image的自动重绘功能有关, 如果image可以通过属性关掉这个功能,也可以试试
      

  3.   

    可以考虑使用delphix控件,图形方面处理真的很棒!
      

  4.   

    你在Timer中画图时,系统也在画,两个会冲突,所以会闪动,
    由于image没有给用户提供接口所以只能使用tpaintbox
    用一个paintbox
    在你的Timer事件中
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
        paintbox1.Invalidate;
    end;然后在paintbox的onpaint事件中画图。
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    var
        ab: TBitmap;
    begin
        ab:=TBitmap.Create;
        ab.LoadFromFile('E:\1.bmp');
        paintbox1.Canvas.Draw(0,0,ab);
        ab.Free;
    end;
    控制的时候设置一个全局变量,在timer的事件中处理,
    然后在onpaint事件中根据这个全局变量来决定调用那一个图。
    我的办法应该没有问题,我试过了的。
      

  5.   

    不行的话你自己写双缓冲,当显示上一副的事后把下一幅调入内存,还不行
    DirectDraw了只能!偶还没用过DirectDraw!
      

  6.   

    你这样切换画面当然会闪烁了,你应该用DC做,先将图片读到内存里面,然后再从内存里面读出来用API函数做,只有这样才能不闪烁
    你去看看BilBlt这个API函数吧
      

  7.   

    BilBlt我也用过,也不行。我现在已经找到原因了,我把image控件放在panel上,而我把image作成和我要切换的图一样大小,26*40尺寸,把图画在image的canvas上,由于image小,就能看到他有规律的闪动。所以必须在image上帖大背景图,在他的canvas上画小的切换图,这样的动画就不会闪。在这里多谢各位的帮助。