gif - 如何在 nsis 的自定义页面中播放动画 gif?
问题描述
我正在构建一个 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
解决方案
您发布的代码无法提取 test.gif!
除此之外,Sleep
在页面上使用通常不是一个好主意,因为它会锁定 UI。
在位图控件上播放 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
推荐阅读
- android - Flutter - Activity Tracker App - 步数、楼上/楼下、静止
- javascript - 角度基于权限的路由
- reactjs - 如何在 React 中获取 API 响应?
- json - 找不到名称“JSON”打字稿文件
- bash - 如何删除字符串中的 \r\n 并将字符串转换为数组
- node.js - 没有互联网访问时,纱线运行节点非常慢
- c - WIN32 - 除静态文本(标签)外的隐藏控件工作
- c# - 使用
给出空指针 - python - NameError:未定义名称“BertModel”,导入 Bert 提取摘要器时出错
- javascript - 如何将普通节点服务器转换为可执行文件?