Jump to content

GIF from resource Wrapper


 Share

Recommended Posts

#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

How to use GIF in compiled script with Wpapper?

 

GIFAnimation.au3 resources.au3

Link to comment
Share on other sites

Just now, saraconor said:
#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

How to use GIF in compiled script with Wpapper?

 

 

 

 

 

GIF.rar

Link to comment
Share on other sites

21 minutes ago, Nine said:

Get RessourceEX UDF and look at the example file, it is very simple to configure it :

 

 

#AutoIt3Wrapper_Res_File_Add=1.gif, rt_rcdata, G2

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

$hGui = GUICreate("GIF Animation", 411, 211, -1, -1)
$iPic = GUICtrlCreatePic('', 61, 10, 61, 10)
if Not @Compiled Then _GUICtrlCreateGIF(@ScriptDir & "\1.gif", "", 61, 10)
_Resource_SetToCtrlID($iPic, 'G2')

GUISetState()

do
until GUIGetMsg() = -3

#AutoIt3Wrapper_Res_File_Add=1.gif, rt_rcdata, G2

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

$hGui = GUICreate("GIF Animation", 411, 211, -1, -1)
$iPic = GUICtrlCreatePic('', 61, 10, 61, 10)
if Not @Compiled Then _GUICtrlCreateGIF(@ScriptDir & "\1.gif", "", 61, 10)
_Resource_SetToCtrlID($iPic, 'G2')

GUISetState()

do
until GUIGetMsg() = -3

I lost, maximum what i get is static image, without animation

Link to comment
Share on other sites

Here is my example from my UDF (resource_test_ani_gif.au3 )

#AutoIt3Wrapper_Res_File_Add=gif-Green-UFO.gif, rt_rcdata, ANI_GIF_1

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <Misc.au3>
#include <WinAPI.au3>
#include <Timers.au3>

#include "resources.au3"

HotKeySet("{Esc}", "Quit")
HotKeySet("{Left}", "Left")
HotKeySet("{Right}", "Right")
HotKeySet("{Pause}", "Pause")

Global $GIF_TimerID, $hImage, $IMG_Ctrl, $GFC, $GFDC, $pDimensionIDs, $tDL
Global $Pause, $i = 0

$hGUI = GUICreate("GIF Animation", 300, 200)
GUICtrlCreateLabel("text behind GIF - test of transparency", 5, 15, 200, 25)
$IMG_Ctrl = GUICtrlCreateLabel("", 10, 10, 10, 10) ; For Drawing
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Transparency's working
GUISetState(@SW_SHOW)

GifInit()
; Start Animation: instead of using the time delays between frames given from GIF we use 100ms for simplicity
_Timer_SetTimer($hGUI, 100, "_Draw_Timer")

While 1
    If GUIGetMsg() = -3 Then Quit()
WEnd

Func _Draw_Timer($hWnd, $Msg, $iIDTimer, $dwTime)
    If Not $Pause Then
        If $i = $GFC Then $i = 0 ; If $i = the frame count then reset $i to 0
        GifDrawFrame($i)
        $i += 1
    EndIf
EndFunc

Func Quit()
    _Timer_KillAllTimers($hGUI)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()

    HotKeySet("{Esc}")
    HotKeySet("{Left}")
    HotKeySet("{Right}")
    HotKeySet("{Pause}")

    Exit
EndFunc

Func GifInit()
    _GDIPlus_Startup()
    ; Load your animated GIF (from file or from resources)
;~  $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\gif-Green-UFO.gif")
    $hImage = _ResourceGetAsImage("ANI_GIF_1")

    $tDL = DllStructCreate($tagGUID) ; Create a struct to hold the GUID.
    $pDimensionIDs = DllStructGetPtr($tDL) ; Get a pointer to the GUID struct.

    ; Get the FrameDimensionsCount of the loaded gif
    $GFDC = DllCall($ghGDIPDll, "int", "GdipImageGetFrameDimensionsCount", "ptr", $hImage, "int*", 0)

    ; Get the FrameDimensionsList , which fills the GUID struct by passing the GUID pointer and the FrameDimensionsCount.
    DllCall($ghGDIPDll, "int", "GdipImageGetFrameDimensionsList", "ptr", $hImage, "ptr", $pDimensionIDs, "int", $GFDC[2])

    ; Get the FrameCount of the loaded gif by passing the GUID pointer
    $GFC = DllCall($ghGDIPDll, "int", "GdipImageGetFrameCount", "int", $hImage, "ptr", $pDimensionIDs, "int*", 0)
    $GFC = $GFC[3]
EndFunc

Func GifDrawFrame($i)
    ; Select the ActiveFrame in the loaded GIF by telling it. The frame starts at 0 ($i)
    DllCall($ghGDIPDll, "int", "GdipImageSelectActiveFrame", "ptr", $hImage, "ptr", $pDimensionIDs, "int", $i)

    ; get current frame from GIF and draw it on the control
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    _SetBitmapToCtrl($IMG_Ctrl, $hBitmap)
    _WinAPI_DeleteObject($hBitmap)
EndFunc

Func Left()
    If WinActive($hGUI) Then
        If Not $Pause Then Return
        $i -= 1
        If $i = -1 Then $i = $GFC - 1
        GifDrawFrame($i)
    Else
        HotKeySet("{Left}")
        Send("{Left}")
        HotKeySet("{Left}", "Left")
    EndIf
EndFunc

Func Right()
    If WinActive($hGUI) Then
        If Not $Pause Then Return
        $i += 1
        If $i = $GFC Then $i = 0
        GifDrawFrame($i)
    Else
        HotKeySet("{Right}")
        Send("{Right}")
        HotKeySet("{Right}", "Right")
    EndIf
EndFunc

Func Pause()
    If WinActive($hGUI) Then
        $Pause = Not $Pause
        If $Pause Then
            WinSetTitle($hGUI, '', 'GIF Animation - PAUSED')
        Else
            WinSetTitle($hGUI, '', 'GIF Animation')
        EndIf
    Else
        HotKeySet("{PAUSE}")
        Send("{PAUSE}")
        HotKeySet("{PAUSE}", "Pause")
    EndIf
EndFunc

 

gif-Green-UFO.gif

Edited by Zedna
Link to comment
Share on other sites

And here is simplified version without Pause/Left/Right hotkeys,

just automatically indefinitelly plays GIF image:

#AutoIt3Wrapper_Res_File_Add=gif-Green-UFO.gif, rt_rcdata, ANI_GIF_1

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <Misc.au3>
#include <WinAPI.au3>
#include <Timers.au3>

#include "resources.au3"

HotKeySet("{Esc}", "Quit")

Global $GIF_TimerID, $hImage, $IMG_Ctrl, $GFC, $GFDC, $pDimensionIDs, $tDL
Global $i = 0

$hGUI = GUICreate("GIF Animation", 300, 200)
GUICtrlCreateLabel("text behind GIF - test of transparency", 5, 15, 200, 25)
$IMG_Ctrl = GUICtrlCreateLabel("", 10, 10, 10, 10) ; For Drawing
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Transparency's working
GUISetState(@SW_SHOW)

GifInit()
; Start Animation: instead of using the time delays between frames given from GIF we use 100ms for simplicity
_Timer_SetTimer($hGUI, 100, "_Draw_Timer")

While 1
    If GUIGetMsg() = -3 Then Quit()
WEnd

Func _Draw_Timer($hWnd, $Msg, $iIDTimer, $dwTime)
    If $i = $GFC Then $i = 0 ; If $i = the frame count then reset $i to 0
    GifDrawFrame($i)
    $i += 1
EndFunc

Func Quit()
    _Timer_KillAllTimers($hGUI)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    HotKeySet("{Esc}")
    Exit
EndFunc

Func GifInit()
    _GDIPlus_Startup()
    ; Load your animated GIF (from file or from resources)
;~  $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\gif-Green-UFO.gif")
    $hImage = _ResourceGetAsImage("ANI_GIF_1")

    $tDL = DllStructCreate($tagGUID) ; Create a struct to hold the GUID.
    $pDimensionIDs = DllStructGetPtr($tDL) ; Get a pointer to the GUID struct.

    ; Get the FrameDimensionsCount of the loaded gif
    $GFDC = DllCall($ghGDIPDll, "int", "GdipImageGetFrameDimensionsCount", "ptr", $hImage, "int*", 0)

    ; Get the FrameDimensionsList , which fills the GUID struct by passing the GUID pointer and the FrameDimensionsCount.
    DllCall($ghGDIPDll, "int", "GdipImageGetFrameDimensionsList", "ptr", $hImage, "ptr", $pDimensionIDs, "int", $GFDC[2])

    ; Get the FrameCount of the loaded gif by passing the GUID pointer
    $GFC = DllCall($ghGDIPDll, "int", "GdipImageGetFrameCount", "int", $hImage, "ptr", $pDimensionIDs, "int*", 0)
    $GFC = $GFC[3]
EndFunc

Func GifDrawFrame($i)
    ; Select the ActiveFrame in the loaded GIF by telling it. The frame starts at 0 ($i)
    DllCall($ghGDIPDll, "int", "GdipImageSelectActiveFrame", "ptr", $hImage, "ptr", $pDimensionIDs, "int", $i)

    ; get current frame from GIF and draw it on the control
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    _SetBitmapToCtrl($IMG_Ctrl, $hBitmap)
    _WinAPI_DeleteObject($hBitmap)
EndFunc

 

EDIT: Note that my Resources UDF and these examples are compatible with old AutoIt 3.2.12.1 which is still my mainly used one version.

Edited by Zedna
Link to comment
Share on other sites

  • Developers

@saraconor,

Care to slow down a little and simply focus on one example script?
Just report which one you are using, post the script and the encountered error.

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

3 minutes ago, Jos said:

@saraconor,

Care to slow down a little and simply focus on one example script?
Just report which one you are using, post the script and the encountered error.

Jos

I use Example.au3 from ResourcesEx \ Examples package,

When start show: error: _WinAPI_SetWindowLong(): undefined function.

 

Link to comment
Share on other sites

  • Developers

So what does that tell you? 
I did the same and indeed get that error for _WinAPI_SetWindowLong(), so simply opened the AutoIt3 helpfile and look for _WinAPI_SetWindowLong(), which tells me I need to have this include in the source:

#include <WinAPISysWin.au3>

..so added that at the top in example.au3 and didn't get an error anymore. 

Jos

Edited by Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...