A.有一些图片,我需要循环播放(使用Image装入)
B.在图片的底部,我实现滚动字幕(使用Panel+Label+Time控制),使用TRzMarqueeStatus同样如此
C.当我装入图片的时候,Label就会暂停一下(不连续)请教如何能才能消除?或者有其他什么更好的建议。谢谢我的一些调试代码如下:说明:
 1、Panel,Form使用双缓冲
 2、程序在目录机器上运行,目标机器配置有点低。(研华工控主板,主要做嵌入式用的)
 3、目标系统为Winxp,256M,C400
 
{控制Lable滚动,Timer时间间隔为10ms}
procedure TForm1.ScrollTimer(Sender: TObject); 
begin
 Label1.Left:=Label1.Left-1;
 if Label1.Left<(Panel1.Left-Label1.Width) then
  Label1.Left:=Panel1.Width;
end;{间隔1秒随即装图片}
procedure TForm1.LoadPicTimer(Sender: TObject);
var
 picName:String;
begin
  PicName:=FilePath+format('pic%0.4d.jpg',[Random(21)]);//+'.jpg';
  if FileExists(PicName) then
   { ImageEnView1.IO.LoadFromFile(PicName); //使用ImageEnView一样抖动}
      Image1.Picture.LoadFromFile(PicName);
end;

解决方案 »

  1.   

    加一句application.ProcessMessages 试试
      

  2.   

    DoubleBuffered:=true;
    这句加上绘好多了
      

  3.   

    还是不行,我使用AAFont2.6中的TAAScrollText也是不管用
      

  4.   

    用delphi的常规方式处理这个不适合,你应该来一些其它的处理。
    最粗显的方式是:提前装载图片文件,在切换时以内存数据。
      

  5.   

    用TCanvas自己画吧,是最可靠的方法
      

  6.   

    在程序运行时装入内存效果比较可以。但是如果图片多,占用内存就比较严重。
    我也使用Canvas画,TextOut.效果还是抖动。有没有什么方能使用滚动条进度独立出来,不受主程序影响。
      

  7.   

    > 我也使用Canvas画,TextOut.效果还是抖动
    你可以使用双重缓冲(double buffering),具体就是:先将绘制的内容画在bitmap上,再将bitmap覆盖到屏幕上。另外:
    >有没有什么方能使用滚动条进度独立出来,不受主程序影响
    你先前没说到这个问题。
    这个需要使用多线程技术。
      

  8.   

    用双缓冲应该不会闪吧。或者搞一个列表,只保存5张图,每次都从这个列表中取数据。另搞一个线程,定时更换这个列表的内容,只要做好从列表中读取和写入时的同步问题就可以了。
    下面是以前做的关于双缓冲的例子。
    http://topic.csdn.net/u/20070416/10/7ee9ec9a-589b-404d-bd3f-84ef0cd88d20.html
      

  9.   

    Panel1.DoubleBuffered:=true; //加上这句属性设置.