我认为gif动画图像没有原生支持。
最好的方法是什么?任何允许的免费组件?我在考虑使用TImage和ImageList + Timer,但是我需要将gif的每个帧导出到一个单独的bmp文件中。
答案 0 :(得分:46)
在现代Delphi中它非常简单。它都是内置的。将TImage
放到表单上,然后将动画GIF加载到Picture属性中。然后,通过Animate
属性启动动画:
(Image1.Picture.Graphic as TGIFImage).Animate := True;
您可以使用AnimateLoop
和AnimateSpeed
来控制动画。猜测如何再次关闭动画应该很容易!
现在,由于您使用的是Delphi 7,因此您没有内置TGIFImage
组件。但是,您可以从Finn Tolderlund's网站下载代码(您需要最新版本的TGIFImage
)。使用这个版本的组件,上面的代码应该可以正常工作,尽管我个人还没有使用它,因为几年前我从D6移植到D2010。
所有这些不同的TGIFImage
代码实际上只是同一组件的版本,最初由Anders Melander编写,并在2007年捐赠给Embarcadero以包含在Delphi中。
答案 1 :(得分:8)
这只是加载动画gif而不是制作一个
procedure TForm1.FormCreate(Sender: TObject);
begin
( Image1.Picture.Graphic as TGIFImage ).Animate := True;// gets it goin'
( Image1.Picture.Graphic as TGIFImage ).AnimationSpeed:= 500;// adjust your speed
Form1.DoubleBuffered := True;// stops flickering
end;
stackoverflow帮助了我,所以我的一点点回报:)
答案 2 :(得分:5)
答案 3 :(得分:0)
如果你像我一样碰巧使用 JVCL,你可能会遇到 Davids answer 的问题,因为 JVCL 为 GIF 文件注册了 TJvGifImage
,它不是从 TGifImage
下降(见评论到Davids answer)。
在这种情况下,最简单的解决方案似乎是直接从资源加载 GIF 文件:
//eg in FormCreate:
FAnimationGraphic := TGifImage.Create;
FAnimationGraphic.LoadFromResourceName(HInstance, 'GIF_XYZ_ANIMATION');
ImageAnimation.Picture.Graphic := FAnimationGraphic;
(ImageAnimation.Picture.Graphic as TGIFImage).Animate := True;
//eg in FormDestroy:
//FAnimationGraphic must be freed!
//ImageAnimation.Picture is not owner of the image
FreeAndNil(FAnimationGraphic);