如何在Delphi 2010中显示动画gif

时间:2018-04-03 21:35:15

标签: delphi delphi-2010

我在Delphi 2010中尝试了以下各项,在我的表单上显示动画gif。所有这些都会导致访问冲突。 (三次变化中有两种在每次尝试时都被注释掉了。)非常感谢。

/live-data

我试图按照上面链接的问题回答,但解决方案对我不起作用(并且该问题被明确标记为Delphi-7,我不知道是否有变化)。重写为"(image1.Picture.Graphic为TGIFImage).Animate:= true;"导致" ...异常类EInvalidCast,带有消息'无效的类类型转换'。"。我不清楚为什么类型转换是无效的,因为我很肯定在设计时已经加载了动画gif。

编辑以澄清问题,这里是修改后的代码。 showmessage告诉我图像是TdxSmartImage。不知道为什么会这么想。 (我曾尝试将图像加载到devExpress控件中以查看是否可行,但随后我从表单/项目中删除了所有dexExpress元素并重新生成了gif文件。

uses
  ... GIFImg,...

Image1: TImage;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // A valid animated gif was loaded into Image1 at design time
  TGIFImage(image1).Animate := true;
  TGIFImage(image1.Picture).Animate := true;
  TGIFImage(image1.Picture.Graphic).Animate := true;
end;

2 个答案:

答案 0 :(得分:3)

您有第三方库已替换TPicture属性编辑器。编辑器正在创建库自己的gif实现类,但显然它不支持动画图像。

如果要恢复默认设计时行为,则必须卸载属性编辑器。对于一次性覆盖,在加载图片后,编辑dfm文件以更改图片的类名称并编辑pas文件以更改所需的单位名称也可能有用(我不确定)。

在运行时,使用您想要的类更容易。如果链接了负责第三方库中gif图像的单元,则首先取消注册。

TPicture.UnRegisterGraphicClass(TdxSmartImage);
Image1.Picture.LoadFromFile('...');
(Image1.Picture.Graphic as TGIFImage).Animate := True;

如果没有,您应该可以将图像作为TGifImage加载而不会出现任何问题。

答案 1 :(得分:2)

使用上面的各种回答,我能够提出这种有效的方法;

procedure TForm1.FormCreate(Sender: TObject);
  var
    aGIF:TGIFImage;
    sFile: string;
begin
  try
    ...
    aGIF := TGIFImage.Create;
    aGIF.LoadFromFile(sfile);
    aGIF.Animate := true;
    image1.Picture.Graphic := aGIF;
  except
  ...