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