Кто работал с GIFAnimator'ами помогите избавиться от велосипеда

OracleLover
Дата: 09.07.2009 16:55:30
В проекте используется одна гифка, по какому-то событию она запускается в теле процедуры.

В самой гифке на обработчик OnFrameChanged повешена процедура прекращения анимации

procedure TfrmMain.rxgifanmtrTestFrameChanged(Sender: TObject);
begin
  if (Sender as TRxGIFAnimator).FrameIndex = 14 then
    (Sender as TRxGIFAnimator).Animate := false;
end;

но как только это условие срабатывает виснет вся прога, в то же время если где в кнопку вставить оператор выключения анимации гифки - то она корректно останавливается. Поэтому использую такой велосипед - есть на форме таймер, в котором присутствует этот оператор

procedure TfrmMain.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := false;

  rxgifanmtrTest.Animate := false;
end;

а уже в обработчике само гифки стоит
procedure TfrmMain.rxgifanmtrTestFrameChanged(Sender: TObject);
begin
  if (Sender as TRxGIFAnimator).FrameIndex = 14 then
    Timer1.Enabled := true;
end;
OracleLover
Дата: 09.07.2009 16:56:31
Да забыл уточнить использовал компоненты TRxGIFAnimator и TJvGIFAnimator - у обоих такая проблема.
RENaissance
Дата: 09.07.2009 16:57:25

В Delphi есть свой класс для работы с гифами. Пробуй его.

Posted via ActualForum NNTP Server 1.4

OracleLover
Дата: 09.07.2009 17:22:24
RENaissance

В Delphi есть свой класс для работы с гифами. Пробуй его.


Ты уверен? У меня BDS 2006 кстати.

Using in Delphi
Natively, Delphi does not support GIF images, due to some legal copyright issues. What this means, is that when you drop a TImage component on a form, use the Picture Editor (click the ellipsis button in the Value column for properties, such as the Picture property of TImage) to load an image into the TImage, you will not have an option to load GIF images.
Гаджимурадов Рустам
Дата: 09.07.2009 18:21:14
OracleLover
но как только это условие срабатывает виснет вся прога
Что происходит в дебаггере?
Попробуй поставить небольшую задержку после.
Кроик Семён
Дата: 09.07.2009 18:42:27
это действительно всегда так?

(Sender as TRxGIFAnimator)

проверь на NIL и на not(Sender is TRxGIFAnimator)
OracleLover
Дата: 09.07.2009 19:14:24
Кроик Семён
это действительно всегда так?

(Sender as TRxGIFAnimator)

проверь на NIL и на not(Sender is TRxGIFAnimator)


нет, дело не в этом - там вообще имя компоненты стояло, просто я потом его поменяю, чтобы не исправлять эту конструкцию использую.


Гаджимурадов Рустам

Что происходит в дебаггере?
Попробуй поставить небольшую задержку после.


Дебаггером когда проходишь по F7 нигде затыков не просходит, а после окончания прохождения программа работает нормально. Ставить задержку перед оператором - ничего не меняет.
sleep(1000);
Application.ProcessMessages;

rxgifanmtrTest.Animate := false;
Гаджимурадов Рустам
Дата: 09.07.2009 19:18:10
OracleLover
Дебаггером когда проходишь по F7 нигде затыков не просходит,
а после окончания прохождения программа работает нормально.
Куда он заходит-то после выполнения зависающей строчки?

OracleLover
Ставить задержку перед оператором - ничего не меняет.
Я же специально сказал - после.
Где то там
Дата: 09.07.2009 23:13:21
OracleLover
procedure TfrmMain.rxgifanmtrTestFrameChanged(Sender: TObject);
begin
  if (Sender as TRxGIFAnimator).FrameIndex = 14 then
    (Sender as TRxGIFAnimator).Animate := false;
end;


А почему не так:

begin
  if (Sender is TRxGIFAnimator) and (Sender as TRxGIFAnimator).FrameIndex = 14 then
    (Sender as TRxGIFAnimator).Animate := false;
end;
Гаджимурадов Рустам
Дата: 09.07.2009 23:32:19

Сказали же уже почему.
И если проблема была бы в этом, приложение
бы не зависало, а выплевывало эксепшн.
Лучше у кого установлен RxLib проверьте
мой вариант с задержкой. Чем черт не шутит...

Posted via ActualForum NNTP Server 1.4