Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 76

Воспроизведение GIF анимации в VB6

06.05.2020, 21:58. Показов 7486. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Искал поиском по форуму, гуглил в интернете, но решения или примеров кода так и не нашел. Посему, вот тема:
Мне необходимо вставить показ анимированных GIF файлов на форме VB6, с последующей сменой демонстрируемых GIF файлов в контроле. Поскольку стандартные PictureBox и Image отображают GIF только в виде статичного первого кадра из анимации и для задачи не подходят (таймер + куча кадров - не наш метод), решил поискать решение в других контролах из комплекта VB6. И решение нашлось, но.... не такое как хотелось бы.

WebBrowser (компонент Microsoft Internet Controls)
Visual Basic
1
2
3
Private Sub Form_Load()
WebBrowser1.Navigate ("file:///" & App.Path & "/animation.gif")
End Sub
Показывает анимацию, через "..navigate.." в коде можно подменять файл на нужный когда потребуется.
Однако, несмотря на то, что размер поля контрола WebBrowser я растянул значительно больше размеров демонстрируемой картинки, поле WebBrowser всегда отображает полосы прокрутки. А мне этого не нужно.
Свойтво ScrollBars у контрола отсутствует. При этом свойствам - AddressBar, MenuBar, StatusBar (...логично подумать, если всё это повырубать, то вероятно, полосы прокрутки исчезнут) присвоить значение False невозможно. В окне Properties они снова возвращаются в True после первого же запуска. Присвоение этим свойствам False через строки кода тоже безрезультатно (никаких видимых изменений.)

Scriptlet (компонент Microsoft HTML Object Library)
Визуально данный контрол выглядит как PictureBox или Image. В окне Properties для свойства url указываем путь к файлу (например - file:///C:/....<путь>..../animation.gif ) и анимация отображается.
Однако, когда мне нужно сменить файл в поле контрола, компилятор выдаёт ошибку.
- Invalid use of property
Visual Basic
1
Scriptlet1.url ("file:///" & App.Path & "/animation.gif")
- 438: Object doesn't support this propertyor method.
Visual Basic
1
Scriptlet1.url = "file:///" & App.Path & "/animation.gif"
Поскажите как правильно присвоить текстом кода новое значение url без ошибок.

p.s.
Как вариант - вывалить на форму кучу контролов с разными GIF картинками по одной в каждом, и переключать их через свойство Visible... Работает, но это слишком уж убого-топорный вариант. Если не брать во внимание загромождение формы объектами, немаловажный момент - анимация в контролах никогда не останавливается. То есть при отображении/сокрытии будут непременно возникать моменты, когда текущий GIF файл уже воспроизводится где-то с середины.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.05.2020, 21:58
Ответы с готовыми решениями:

Генерация GIF-анимации из кадров
Доброго времени суток! Хочу сделать анимационный GIF. В интернете нет на русском подробного описания. Примеров-то уж тем более. Помогите,...

Воспроизведение gif-анимации
Добрый день. Не могу воспроизвести анимацию на Delphi 7. Находил статьи в интернете писали, что нужно добавить в uses GifImg, но при запуке...

Воспроизведение gif анимации
Возможно ли воспроизведение gif анимации на java? пробовал прописать так, но я не удивлён что не получилось, моя java-FX же особенная XD ...

20
92 / 58 / 21
Регистрация: 09.05.2019
Сообщений: 184
06.05.2020, 23:06
В этом месте ошибка, путь к файлу необходимо указывать в скобках

Цитата Сообщение от MrRoxMJ Посмотреть сообщение
Visual Basic
1
Scriptlet1.url = "file:///" & App.Path & "/animation.gif"
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
07.05.2020, 07:09
Лучший ответ Сообщение было отмечено MrRoxMJ как решение

Решение

Цитата Сообщение от MrRoxMJ Посмотреть сообщение
но решения или примеров кода так и не нашел.
На WEB как то не серьёзно. Решений по воспроизведению Gif в сети не мало.
Есть решения готовые, например от TheTrick:
GifViewer.zip
Есть решения простые, на готовом OCX
GifAnima.zip
Есть простые без OCX
АнимацияГИФ.zip

Но если всё же webbrowser без полос прокрутки, то тоже было, помнится ёлки рисовали:
Елки GIF.zip

Пользуйтесь!

Кстати, код по уничтожению прокруток, бордюров, всякие способы тут:

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub WebBrowser_DocumentComplete(ByVal pDisp As Object, URL As Variant)
  On Error Resume Next
  With WebBrowser.Document
    .body.Style.BorderStyle = "none"
    .body.Scroll = "no"       
    .body.Style.border = "none"
    .documentElement.Style.border = "none"
    .styleSheets.Item(0).rules(0).Style.border = "none"
   End With
End Sub
5
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 76
07.05.2020, 14:10  [ТС]
Огромное спасибо, Pro_grammer!)

- GifViewer.zip
У меня не завёлся. Там какого-то объекта не хватает. Глубоко не стал разбираться в коде что к чему.

- GifAnima.zip
Действительно радикальное и при этом простое решение) Если стандартные контролы (Image и PictureBox) изначально не приспособлены отображать анимацию, то почему бы не использовать сторонний контрол, который под это специально "заточен"? Там есть своя заморочка со Start/Stop и мерцанием, но она легко решается в коде. Единственно, в папке с готовой программой должен всегда лежать OCX файл.

- АнимацияГИФ.zip
Согласен, это работает)) Разбивать каждый файл анимации покадрово, с длительностью каждого кадра - в массив. Затем отображать это всё в Image с таймером. Решение из разряда - как, имея в распоряжении только циркуль и линейку, спроектировать космическую ракету. Текста кода столько, что его выделили в отдельный модуль. Когда-нибудь я "осилю многа букаф" и разберусь в этом коде подробно, как он устроен.

- Елки GIF.zip
У меня тоже была уже мысль просто спрятать полосу прокрутки за пределами формы)) Но самое интересное тут другое - сделать фон WebBrowser прозрачным по цветовому коду из GIF. Спасибо, очень полезная штука.

- "код по уничтожению прокруток..."
Это есть решение всех моих проблем!)) Если бы сразу знать, что скрывать границы/прокрутки... нужно искать не через свойства самого объекта, а через .Document -> body -> Style (ох и глубоко же они запрятали эти параметры!). Как говорится, век живи-век учись. Выпишу себе этот код в блокнот чтобы не потерять.

WebBrowser совместно с кодом прозрачности фона из "ёлок" - то что я искал. Ещё раз спасибо за помощь.

Добавлено через 11 минут
p.s.
Решение найдено, хотя, заодно в этой же теме до конца разобраться и с контролом Scriptlet тоже было бы неплохо, как там правильно менять url строкой кода, и возможно ли это, или контрол "кривой"...
0
Эксперт по электронике
6820 / 3245 / 337
Регистрация: 28.10.2011
Сообщений: 12,672
Записей в блоге: 7
07.05.2020, 15:04
Цитата Сообщение от MrRoxMJ Посмотреть сообщение
- АнимацияГИФ.zip
Согласен, это работает)) Разбивать каждый файл анимации покадрово, с длительностью каждого кадра - в массив. Затем отображать это всё в Image с таймером.
Нормальное решение. Я много раз делал подобное (правда не VB) и не скажу что много кода.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
07.05.2020, 17:19
Цитата Сообщение от locm Посмотреть сообщение
Нормальное решение.
Не совсем. При большом количестве кадров это лишний перерасход памяти. К примеру в GDI+ кадры распаковываются по мере необходимости.

Добавлено через 56 секунд
Цитата Сообщение от MrRoxMJ Посмотреть сообщение
У меня не завёлся. Там какого-то объекта не хватает. Глубоко не стал разбираться в коде что к чему.
Какого объекта?
0
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 76
07.05.2020, 18:27  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Какого объекта?
Да малость недоглядел. Поскольку привык что в моих проектах не бывает модулей (всё леплю в одну скатерть), по привычке запустил проект не через prjGIFViewer.vbp, а через первое что подвернулось -черезfrmGIF.frm (без модулей оно ж без разницы как запускать). Ну, разумеется, всё открылось, загрузилось. И при запуске оно мне выдало:
На строку - modGif.hWnd = picGif.hWnd ' Отрисовываем в PictureBox'e
Ошибка - 424: Object required
Я тогда подумал что вероятно на форму забыли поместить какой-то контрол под таким названием.

А только сейчас заметил в папке файл modGIF.bas . Понял, что то было недостающее не контрол, а модуль. Запустил с VBP. Всё работает.
Упс...)))
0
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 76
08.05.2020, 15:57  [ТС]
Дополню сюда же в тему. Всплыл такой момент:
Использую WebBrowser. Как отучить его "кликать" звуком в моент замены картинки (webbrowser.Navigate) ?
Программа связана со звуком, а контрол, меняя GIFы по таймеру, постоянно "клацает".
Параметр Silent у этого контрола оказался не про звук))

Уважаемый Pro_grammer, быть может, в дополнение к параметрам "WebBrowser.Document.body...." Вы знаете хитрую строчку, которой можно также выключить и звук у WebBrowser ?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
08.05.2020, 17:20
Цитата Сообщение от MrRoxMJ Посмотреть сообщение
хитрую строчку
Ну не строчку, там всё чуть сложнее. Поищите про CoInternetSetFeatureEnabled, может написанное ниже с ошибками.
Сам не пробовал, потому вам испытывать!
Декларация:
Visual Basic
1
2
3
4
5
6
7
Private Declare Function CoInternetSetFeatureEnabled Lib "urlmon.dll" (ByVal FeatureEntry As Integer, ByVal dwFlags As Long, ByVal fEnable As Long) As Long
Private Const FEATURE_DISABLE_NAVIGATION_SOUNDS = 21
Private Const SET_FEATURE_ON_PROCESS As Integer = &H2
' И вызвать где нибудь эту процедуру
private sub subBrowserStopClickSound
Call CoInternetSetFeatureEnabled(FEATURE_DISABLE_NAVIGATION_SOUNDS, SET_FEATURE_ON_PROCESS, True)
end sub
2
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 76
08.05.2020, 18:18  [ТС]
Работает! Спасибо большое! "Клацанья" больше нет
0
 Аватар для АБУ_БАКР 2
1 / 1 / 0
Регистрация: 30.12.2019
Сообщений: 194
03.01.2021, 19:01
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Private Sub WebBrowser_DocumentComplete(ByVal pDisp As Object, URL As Variant)
  On Error Resume Next
  With WebBrowser.Document
    .body.Style.BorderStyle = "none"
    .body.Scroll = "no"      
    .body.Style.border = "none"
    .documentElement.Style.border = "none"
    .styleSheets.Item(0).rules(0).Style.bord er = "none"
   End With
End Sub
Это классно мне тоже помог. Вот вопрос в том что фон формы можно ли как то загифироват виразимся так если возможно то буду блогодарен
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,528
Записей в блоге: 22
03.01.2021, 19:12
Цитата Сообщение от АБУ_БАКР 2 Посмотреть сообщение
фон формы можно ли как то загифироват
У формы есть неприятная особенность - она не поддерживает прозрачность. Вы можете выводить на форму анимированное изображение .gif, но оно будет на чёрном фоне.
0
 Аватар для АБУ_БАКР 2
1 / 1 / 0
Регистрация: 30.12.2019
Сообщений: 194
03.01.2021, 19:25
Argus19,
Это значит невозможно. Жалко
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,528
Записей в блоге: 22
03.01.2021, 19:43
Цитата Сообщение от АБУ_БАКР 2 Посмотреть сообщение
Это значит невозможно
Можно загрузить на форму обычный .gif. Мультипликация многокадрового непрозрачного .gif вполне возможна. В посте №3 Pro_grammer дал несколько ссылок. Надо просто заменить PictureBox на форму.
0
 Аватар для АБУ_БАКР 2
1 / 1 / 0
Регистрация: 30.12.2019
Сообщений: 194
03.01.2021, 20:01
Argus19,
пробовал вот так
Visual Basic
1
2
3
4
5
Private Sub Form_Load()
 
Asli1.Picture = LoadPicture("D:\WORKS\VB_6,0\Bozi\Img\75239.gif")
 
End Sub
картинку показывает а анимации нет
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,528
Записей в блоге: 22
03.01.2021, 20:42
Цитата Сообщение от АБУ_БАКР 2 Посмотреть сообщение
картинку показывает а анимации нет
В таком виде не будет. Вы просто загрузили изображение.
Посмотрите внимательнее код из примеров.
В анимированом .gif несколько кадров. При загрузке отображается только первый кадр. Чтобы была анимация, нужно получить из файла количество кадров и время их показа, получить их местоположение в кадре, запустить таймер и копировать их в указанный контрол по очереди.
0
 Аватар для АБУ_БАКР 2
1 / 1 / 0
Регистрация: 30.12.2019
Сообщений: 194
03.01.2021, 21:02
Argus19,
ясно спасибо
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,528
Записей в блоге: 22
03.01.2021, 21:28
Цитата Сообщение от АБУ_БАКР 2 Посмотреть сообщение
ясно спасибо
Для "спасибо" справа внизу постов есть кнопка "+1Спасибо"
1
 Аватар для АБУ_БАКР 2
1 / 1 / 0
Регистрация: 30.12.2019
Сообщений: 194
03.01.2021, 21:49
Argus19,
для тебя хот сколько угодно поставлю +1
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,528
Записей в блоге: 22
06.01.2021, 01:12
Цитата Сообщение от АБУ_БАКР 2 Посмотреть сообщение
вопрос в том что фон формы можно ли как то загифироват
Я урезал пример от The trick. Нормально играет.
Вложения
Тип файла: zip FormGIFw.zip (817.6 Кб, 42 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.01.2021, 01:12
Помогаю со студенческими работами здесь

Воспроизведение Gif анимации
Как сделать что бы GIF фаил играл, я вставляю а он стоит как картинка...

Чтение файла GIF. Перевод текста в HEX. Декодирование GIF анимации
Всем привет.. задача такая: Необходимо открыть файл GIF.. Например, как в этой статье про декодирование.. ...

Создание gif анимации
Народ, помогите научиться создавать программным путем gif анимацию. Никаких мануалов конкретных я не нашел, искал долго, может неправильно,...

Создание анимации GIF
День добрый! В связи с проблемами поиска по форуму пришлось создать тему. Подскажите как создать анимацию (в папке d:/temp/ штук...

Создание анимации (gif)
Допустим имеем массив из ста картинок типа Image, можно ли из данного массива сделать gif анимацию и сохранить ее на комп.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru