如何以delphi形式使用动画Gif

时间:2012-03-05 20:34:24

标签: delphi animation delphi-7 gif animated-gif

我认为gif动画图像没有原生支持。

最好的方法是什么?任何允许的免费组件?我在考虑使用TImage和ImageList + Timer,但是我需要将gif的每个帧导出到一个单独的bmp文件中。

4 个答案:

答案 0 :(得分:46)

在现代Delphi中它非常简单。它都是内置的。将TImage放到表单上,然后将动画GIF加载到Picture属性中。然后,通过Animate属性启动动画:

(Image1.Picture.Graphic as TGIFImage).Animate := True;

您可以使用AnimateLoopAnimateSpeed来控制动画。猜测如何再次关闭动画应该很容易!

现在,由于您使用的是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)

搜索谷歌“Delphi Gif”想出了这个

http://melander.dk/delphi/gifimage/

现在是Delphi的一部分

答案 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);