使用多线程将动画GIF图像放置在VCL上

时间:2019-04-30 11:44:46

标签: multithreading delphi gif delphi-10.1-berlin

我想在主程序运行时在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;

如果有人知道参考好的教程,也会有所帮助。

How To Build Multithreaded Applications带我到现在的位置。

1 个答案:

答案 0 :(得分:4)

您根本不需要线程。 VCL现有的TGIFImage类(可用于在TImage组件中显示GIF图像)已经支持动画GIF。

查看以下TGIFImage属性:

Animate

  

指定是否应为GIF设置动画。

     

Animate属性指定在显示时是否应该对存储在TGIFImage实例中的GIF进行动画处理。

AnimateLoop

  

指定是否应循环播放GIF动画。

     

AnimateLoop属性指定是否应循环存储在TGIFImage实例中的GIF动画。

     

注意:仅当Animate属性设置为True时,更改AnimateLoop属性才有效。

AnimationSpeed

  

指定GIF动画速度。

     

AnimationSpeed属性指定GIF动画速度,以正常速度的百分比表示。

     

AnimationSpeed的值必须在0到1000之间。