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

问题描述 投票:-1回答:1

我想在主编程运行时在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带我进入现在的位置。

multithreading delphi gif delphi-10.1-berlin
1个回答
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之间。

© www.soinside.com 2019 - 2024. All rights reserved.