Что нового

анимация GIF в скомпилированном файле

saraconor

Новичок
Сообщения
379
Репутация
2
Код:
#AutoIt3Wrapper_Res_File_Add=1.gif, rt_rcdata, G2

#include "resources.au3"
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include "GIFAnimation.au3"

$sFile = @ScriptDir & "\1.gif"
$hGui = GUICreate("GIF Animation", 411, 211, -1, -1)
$hGIF = _GUICtrlCreateGIF($sFile, "", 61, 10)

GUISetState()

do
until GUIGetMsg() = -3


Как в этом примере можно картинку гиф использовать через ресурсы Wrapper, чтобы можно было использовать ее в скомпилированном виде без исходника картинки?
 

Вложения

  • 140,1 КБ Просмотры: 2

Diamond

Меценат
Меценат
Сообщения
15
Репутация
1
У Вас в проект включена UDF resources.au3, почему Вы не пытаетесь её использовать?
Нужно загрузить ресурс как бинарные данные, и передать их в функцию _GUICtrlCreateGIF, она как я понял принимает как путь к файлу так и бинарные данные.

Если без дополнительных проверок на ошибки, и без использования resources.au3
Проверить полностью не смог поскольку одна из включенных UDF выдает ошибки при компиляции.
Ваш код:
Код:
#AutoIt3Wrapper_Res_File_Add=1.gif, rt_rcdata, G2

#include "resources.au3"
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include "GIFAnimation.au3"
#include <WinAPI.au3>
#include <WinAPIRes.au3>
$sFile = @ScriptDir & "\1.gif"
$hGui = GUICreate("GIF Animation", 411, 211, -1, -1)


;~ $hGIF = _GUICtrlCreateGIF($sFile, "", 61, 10)
$G2 = GetResAsBinary()
$hGIF = _GUICtrlCreateGIF($G2, "", 61, 10)

GUISetState()

do
until GUIGetMsg() = -3



Func GetResAsBinary()
	Local $hInstance, $hResource, $GlobalMemoryBlock, $MemoryPointer, $ResSize, $ResStruct, $G2Bin
	If Not @Compiled Then Return SetError(1)
	$hInstance = _WinAPI_GetModuleHandle(0)
	;Получение указателя на ресурс:
	$hResource = _WinAPI_FindResource( $hInstance, $RT_RCDATA, "G2")
	$GlobalMemoryBlock = _WinAPI_LoadResource($hInstance, $hResource)
	$MemoryPointer = _WinAPI_LockResource($GlobalMemoryBlock)
	;Получение бинарных данных:
	$ResSize = _WinAPI_SizeOfResource($hInstance, $hResource)
	$ResStruct = DllStructCreate("byte[" & $ResSize & "]", $MemoryPointer)
	$G2Bin = DllStructGetData($ResStruct, 1)
	Return $G2Bin
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4 462
Репутация
1 208
Код:
$hGIF = _GUICtrlCreateGIF(@ScriptFullPath, "10;G2", 61, 10)
 
Автор
S

saraconor

Новичок
Сообщения
379
Репутация
2
Diamond сказал(а):
У Вас в проект включена UDF resources.au3, почему Вы не пытаетесь её использовать?
Нужно загрузить ресурс как бинарные данные, и передать их в функцию _GUICtrlCreateGIF, она как я понял принимает как путь к файлу так и бинарные данные.
Были попытки по разному использовать эту функцию, но все безрезультатны, так что просто оставлена функция в знак того что я пытаюсь что-то с ее помощью делать :smile:


Добавлено:
Сообщение автоматически объединено:

InnI сказал(а):
Код:
$hGIF = _GUICtrlCreateGIF(@ScriptFullPath, "10;G2", 61, 10)
Просто спасли. спасибо большое, все работает.


Добавлено:
Сообщение автоматически объединено:

Diamond сказал(а):
Нужно загрузить ресурс как бинарные данные, и передать их в функцию _GUICtrlCreateGIF, она как я понял принимает как путь к файлу так и бинарные данные.
Звучит волшебно, но в результате безсистемного изучения, терминология не одна из моих сильных сторон.


Добавлено:
Сообщение автоматически объединено:

InnI сказал(а):
Код:
$hGIF = _GUICtrlCreateGIF(@ScriptFullPath, "10;G2", 61, 10)
Подскажите, а "10" перед ;G2 это для чего?
 

InnI

AutoIT Гуру
Сообщения
4 462
Репутация
1 208
saraconor [?]
"10" перед ;G2 это для чего?
10 - это код ресурса RCData. Коды перечислены в APIResConstants.au3 (начинаются с префикса $RT_)
Код:
Global Const $RT_RCDATA = 10
 
Верх