我在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;
答案 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
...