Использование многопоточности для размещения анимированного GIF-изображения на VCL - PullRequest
0 голосов
/ 30 апреля 2019

Я хочу показать (анимированный) GIF в TImage (GIF) во время работы основного программирования. Прямо сейчас, либо основная программа ожидает GIF, либо GIF ожидает основной программы (потока) перед отображением.

Моя идея заключается в том, что GIF-изображение должно быть запущено в отдельном потоке. Изображение GIF не используется где-либо еще в основной программе. Я много читал о многопоточности (новое для меня). Delphi позволяет мне создавать новый поток в отдельном модуле (встроенная функция), но многие онлайновые примеры и учебные пособия просто помещают объект TThread в основную форму. Если я это делаю, я получаю ошибку компилятора, что моя основная форма не содержит члена с именем «Выполнить» (см. Код).

Что я делаю не так? Должен ли я перейти на отдельный поток во втором блоке? Любой совет, как получить доступ к этому GIF (TImage) через этот отдельный поток? Я знаю, что я должен позаботиться о синхронизации между VCL и отдельным потоком. Я также читал, что у современного Delphi есть возможность Очереди, которая, как утверждают, превосходит синхронизацию.

(в разделе интерфейса):

type
  TThreadGIF = class(TThread)
  protected
    procedure Execute; override;
  end;

(в разделе реализации ниже {$ R * .dfm}):

procedure TThreadGIF.Execute;
begin
  NameThreadForDebugging('ThreadGIFname');
  { code should start here }
end;

Если кто-нибудь знает ссылку на хороший учебник, это также поможет.

Как создавать многопоточные приложения возвращает меня в мое текущее положение.

1 Ответ

4 голосов
/ 30 апреля 2019

Вам не нужна нить вообще.Существующий класс VCL TGIFImage, который можно использовать для отображения изображений GIF в компоненте TImage, уже поддерживает анимированные изображения GIF.

Посмотрите на следующие свойства TGIFImage:

Animate

Указывает, следует ли анимировать GIF.

Свойство Animate указывает, должен ли GIF, хранящийся в экземпляре TGIFImage,быть анимированным при отображении.

AnimateLoop

Указывает, должен ли анимация GIF зацикливаться.

Свойство AnimateLoop указывает, должна ли анимацияGIF, хранящийся в экземпляре TGIFImage, должен зацикливаться.

Примечание. Изменение свойства AnimateLoop действует только в том случае, если для свойства Animate установлено значение True.

AnimationSpeed

Определяет скорость анимации GIF.

Свойство AnimationSpeed ​​указывает скорость анимации GIF в процентах отнормальная скорость.

Значение AnimationSpeed ​​должно находиться в диапазоне от 0 до 1000.

...