我想在主程序运行时在TImage(GIF)中显示(动画)GIF。现在,要么显示主程序等待GIF,要么显示GIF等待主程序(线程)。
我的想法是GIF图片应在单独的线程中运行。 GIF图像未在主程序中的其他位置使用。我已经阅读了很多有关多线程的知识(对我来说是新的)。 Delphi允许我在单独的单元(内置功能)中构建新线程,但是许多在线示例和教程只是将TThread对象放在主窗体上。如果这样做,我会收到一个编译器错误,提示我的主窗体不包含名为“ Execute”的成员(请参见代码)。
我在做什么错?我应该在第二单元中寻求单独的线程吗?关于如何通过此单独的线程访问此GIF(TImage)的任何建议?我知道我必须注意VCL和单独线程之间的同步。我还读到现代的Delphi有一个Queue的可能性,据称它比同步要优越。
(在界面部分):
type
TThreadGIF = class(TThread)
protected
procedure Execute; override;
end;
(在实现部分的{$ R * .dfm}下面):
procedure TThreadGIF.Execute;
begin
NameThreadForDebugging('ThreadGIFname');
{ code should start here }
end;
如果有人知道参考好的教程,也会有所帮助。
答案 0 :(得分:4)
您根本不需要线程。 VCL现有的TGIFImage
类(可用于在TImage
组件中显示GIF图像)已经支持动画GIF。
查看以下TGIFImage
属性:
指定是否应为GIF设置动画。
Animate属性指定在显示时是否应该对存储在TGIFImage实例中的GIF进行动画处理。
指定是否应循环播放GIF动画。
AnimateLoop属性指定是否应循环存储在TGIFImage实例中的GIF动画。
注意:仅当Animate属性设置为True时,更改AnimateLoop属性才有效。
指定GIF动画速度。
AnimationSpeed属性指定GIF动画速度,以正常速度的百分比表示。
AnimationSpeed的值必须在0到1000之间。