Автор Тема: Проблемы с воспроизведением gif анимации в GUI при помощи GIFAnimation.au3  (Прочитано 479 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ramzesranec [?]

  • Новичок
  • *
  • Сообщений: 4
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
Func SomeFunc($sFileSet)
   Local $aGIFSet = [0], $msg
   Local $hGUI = GUICreate("Click to delete", 0, 310, 0, -1)
   Local $aFileSet = StringSplit($sFileSet, ';')

   For $i = 1 To $aFileSet[0]
      $aGIFSet[0] = $i
      ReDim $aGIFSet[$i+1]
      $aGIFSet[$i] = _GUICtrlCreateGIF($aFileSet[$i], "", 305*$i-300, 5, 300, 300)
      GUICtrlSetTip($aGIFSet[$i], $aFileSet[$i])
   Next

   For $i = 1 To $aGIFSet[0]
      _GIF_PauseAnimation($aGIFSet[$i])
      _GIF_RefreshGIF($aGIFSet[$i])
   Next

   ;For $i = 1 To $aGIFSet[0]
   ;   _GIF_ResumeAnimation($aGIFSet[$i])
   ;Next

   WinMove($hGUI, Default, Default, Default, 305*$aFileSet[0]+11)
   GUISetState()

   Local $GIFcount = $aGIFSet[0]

   While $GIFcount > 1
      $msg = GUIGetMsg()
      If $msg = -3 Then ExitLoop
      For $i = 1 To $aGIFSet[0]
         If $msg = $aGIFSet[$i] Then
            Switch MsgBox(1, 'Confirmation', 'Are you sure you want to delete this file?')
            Case 1
               $GIFcount -= 1
               _GIF_DeleteGIF($aGIFSet[$i])
               FileDelete($aFileSet[$i])
            EndSwitch
         EndIf
      Next
   WEnd

   GUIDelete($hGUI)
EndFunc
 


При первом вызове SomeFunc все гифки стопаются и рефрешатся, но при следующих вызовах (другой набор гиф файлов, новое окно гуи) гифки проигрываются. Не могу понять причину.
Далее, если раскомментить строки с продолжением воспроизведения (или закомментить паузу с рефрешем), гифки проигрываются не одновременно, а нужно, чтобы одновременно. Как правило, в окне гуи находится минимум 2 гифки. Помогите разобраться с проблемой.

Русское сообщество AutoIt


Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2797
  • Репутация: 472
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
(нажмите для показа/скрытия)
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Оффлайн ramzesranec [?]

  • Новичок
  • *
  • Сообщений: 4

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
К сожалению, но ваш вариант мне не помог ни по одному пункту((
К тому же, хотелось бы еще услышать причину, по которой все работает не так, как мне бы хотелось.

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2797
  • Репутация: 472
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Я б не выкладывал код, если бы у меня не работал. Устанавливал несколько гифок. Все воспроизводятся одновременно. Рефрешаться в смысле мигают?

Русское сообщество AutoIt


Оффлайн ramzesranec [?]

  • Новичок
  • *
  • Сообщений: 4

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
У вас код от моего не отличается практически ничем, все то же, что и у меня. На некоторых гифках отставание в кадрах еле заметно, на других отставание очень большое. Возможно, это связано с количеством кадров в гифке и\или в размере кадров. Компьютер у меня относительно мощный, win7.
Рефреш - я имел в виду функцию _GIF_RefreshGIF(), насколько я понимаю, она сбрасывает гифку на 1 кадр.

Я правильно понял, что у вас мой код не работает как надо, а ваш работает? В чем же дело, если у меня разницы нет вообще? Даже количество инструкций одинаковое, время исполнения тоже. Изначально мой код выглядел точно так же, как и у вас, только WinMove() был после цикла. Я думал, что из-за цикла гифки паузятся на разных кадрах, поэтому решил паузу вынести в отдельный чистый цикл, чтобы ничего не мешало, но все без толку.

Основная задача - найти причину того, почему гифки рассинхронизированы (если убрать паузу из кода вначале топика), потом надо разобраться, почему, если гифки поставить на паузу в коде, то при втором вызове функции гифки снова пляшут.


Добавлено: Октябрь 30, 2018, 11:04:53
Заметил одну интересную вещь, гифки работают как надо только в первом окне гуи (при первом вызове), а дальше облом.


Добавлено: Октябрь 31, 2018, 06:41:42
Частично решил проблему, освободив память от гифок после закрытия окна GUI. В первом окне идет теперь рассинхрон, зато в следующих уже все гифки проигрываются одновременно. Бывает, если гифок много или они много весят, то программа зависает :(

Код: AutoIt [Выделить]
Func SomeFunc($sFileSet)
   Local $aGIFSet = [0], $msg
   Local $hGUI = GUICreate("Click to delete", 0, 310, 0, -1)
   Local $aFileSet = StringSplit($sFileSet, ';')

   WinMove($hGUI, '', Default, Default, 305*$aFileSet[0]+11)

   For $i = 1 To $aFileSet[0]
      $aGIFSet[0] = $i
      ReDim $aGIFSet[$i+1]
      $aGIFSet[$i] = _GUICtrlCreateGIF($aFileSet[$i], "", 305*$i-300, 5, 300, 300)
      _GIF_PauseAnimation($aGIFSet[$i])
      GUICtrlSetTip($aGIFSet[$i], $aFileSet[$i])
   Next

   GUISetState()

   For $i = 1 To $aGIFSet[0]
      _GIF_ResumeAnimation($aGIFSet[$i])
   Next

   Local $GIFcount = $aGIFSet[0]

   While $GIFcount > 1
      $msg = GUIGetMsg()
      If $msg = -3 Then ExitLoop
      For $i = 1 To $aGIFSet[0]
         If $msg = $aGIFSet[$i] Then
            Switch MsgBox(1, 'Confirmation', 'Are you sure you want to delete this file?')
            Case 1
               $GIFcount -= 1
               _GIF_DeleteGIF($aGIFSet[$i])
               FileDelete($aFileSet[$i])
            EndSwitch
         EndIf
      Next
   WEnd

   GUIDelete($hGUI)

   For $i = 1 To $aGIFSet[0]
      _GIF_DeleteGIF($aGIFSet[$i])
   Next
EndFunc
 

« Последнее редактирование: Октябрь 31, 2018, 06:44:31 от ramzesranec »

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
6131 Просмотров
Последний ответ Август 14, 2010, 01:31:31
от HukpoFuJl
2 Ответов
7018 Просмотров
Последний ответ Август 31, 2012, 17:37:52
от Ilyialat
10 Ответов
4952 Просмотров
Последний ответ Январь 10, 2014, 23:20:24
от Siroga00VII
0 Ответов
1500 Просмотров
Последний ответ Май 13, 2012, 05:56:12
от n158
2 Ответов
2902 Просмотров
Последний ответ Июнь 04, 2012, 17:08:51
от td1Qf
5 Ответов
2862 Просмотров
Последний ответ Июнь 29, 2012, 11:38:53
от Afonichev
1 Ответов
2059 Просмотров
Последний ответ Сентябрь 19, 2012, 18:14:04
от Yashied
10 Ответов
2398 Просмотров
Последний ответ Декабрь 16, 2014, 20:41:52
от inververs
1 Ответов
1657 Просмотров
Последний ответ Февраль 07, 2015, 23:48:12
от madmasles
4 Ответов
454 Просмотров
Последний ответ Октябрь 16, 2018, 22:32:05
от Visors