Как я могу играть в анимированные GIF на пользовательской странице в Nsis? - PullRequest
0 голосов
/ 29 января 2019

Я создаю установщик NSIS / MUI2 и хочу добавить пользовательскую страницу, которая воспроизводит gif в течение нескольких секунд и с растровым изображением на этой странице, а затем автоматически переходить на следующую страницу.Я не могу сделать это правильно.Можете ли вы помочь мне, как я могу это сделать?

Вот мой код:

OutFile "Example.exe"


XPStyle on
RequestExecutionLevel admin

!include "MUI2.nsh"
!include nsDialogs.nsh
!include LogicLib.nsh
!include WinCore.nsh ; MAKELONG

!insertmacro MUI_PAGE_WELCOME
Page custom nsDialogsPageEnter nsDialogsPageExit
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!insertmacro MUI_PAGE_FINISH





Function nsDialogsPageEnter
    nsDialogs::Create 1018
    Pop $0


    ${NSD_CreateBitmap} 30% 30% 80% 80% ""
    Pop $0
    File "/oname=$pluginsdir\img.bmp" "${NSISDIR}\Contrib\Graphics\Wizard\arrow.bmp"
    ${NSD_SetImage} $0 "$pluginsdir\img.bmp" $1

    newadvsplash::show /NOUNLOAD 1200 250 0 -1 /BANNER /NOCANCEL "$PLUGINSDIR\test.gif"
    newadvsplash::hwnd /NOUNLOAD
    Pop $0
    AnimGif::play /NOUNLOAD /hwnd=$0 "$PLUGINSDIR\test.gif"

    ;slow functions

    Sleep 3000

    newadvsplash::stop
    AnimGif::stop



    nsDialogs::Show
FunctionEnd

Function nsDialogsPageExit
FunctionEnd

Section "-Main"
SectionEnd

1 Ответ

0 голосов
/ 29 января 2019

Код, который вы опубликовали, не может извлечь test.gif!

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

ВоспроизвестиGIF поверх элемента управления растровым изображением:

!include "MUI2.nsh"
!include nsDialogs.nsh
!include LogicLib.nsh

!insertmacro MUI_PAGE_WELCOME
Page custom nsDialogsPageEnter
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE English

Function beginanimfunc
${NSD_KillTimer} ${__FUNCTION__}
${NSD_SetImage} $0 "$pluginsdir\img.bmp" $1
AnimGif::play /NOUNLOAD /HALIGN=0 /VALIGN=0 /HWND=$0 /BGCOL=0x0000ff "$PLUGINSDIR\anim.gif"
${NSD_CreateTimer} stopanimfunc 2000
FunctionEnd

!include WinMessages.nsh
Function stopanimfunc
${NSD_KillTimer} ${__FUNCTION__}
AnimGif::stop
SendMessage $hWndParent ${WM_COMMAND} 1 "" ; Click next button
FunctionEnd

Function nsDialogsPageEnter
    nsDialogs::Create 1018
    Pop $0

    StrCpy $1 ""
    ${NSD_CreateBitmap} 30% 30% 80% 80% ""
    Pop $0
    File "/oname=$pluginsdir\img.bmp" "${NSISDIR}\Contrib\Graphics\Wizard\arrow.bmp"
    File "/oname=$pluginsdir\anim.gif" "C:\myfiles\myanim.gif"
    ${NSD_CreateTimer} beginanimfunc 1

    nsDialogs::Show
    ${NSD_FreeImage} $1
FunctionEnd

Воспроизведение GIF в всплывающем всплывающем окне:

!include "MUI2.nsh"
!include nsDialogs.nsh
!include LogicLib.nsh

!insertmacro MUI_PAGE_WELCOME
Page custom nsDialogsPageEnter
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE English

!include WinMessages.nsh
Function stopanimfunc
${NSD_KillTimer} ${__FUNCTION__}
newadvsplash::stop /FADEOUT
AnimGif::stop
SendMessage $hWndParent ${WM_COMMAND} 1 "" ; Click next button
FunctionEnd

Function nsDialogsPageEnter
    nsDialogs::Create 1018
    Pop $0

    StrCpy $1 ""
    ${NSD_CreateBitmap} 30% 30% 80% 80% ""
    Pop $0
    File "/oname=$pluginsdir\img.bmp" "${NSISDIR}\Contrib\Graphics\Wizard\arrow.bmp"
    ${NSD_SetImage} $0 "$pluginsdir\img.bmp" $1
    File "/oname=$pluginsdir\anim.gif" "C:\myfiles\myanim.gif"

    newadvsplash::show /NOUNLOAD 1200 250 0 -1 /BANNER /NOCANCEL /PASSIVE "" ; <- you can put a bitmap here also
    newadvsplash::hwnd /NOUNLOAD
    Pop $0
    AnimGif::play /NOUNLOAD /HALIGN=0 /VALIGN=0 /HWND=$0 /BGCOL=0x0000ff "$PLUGINSDIR\anim.gif"
    ${NSD_CreateTimer} stopanimfunc 2000
    nsDialogs::Show
    ${NSD_FreeImage} $1
FunctionEnd
...