论坛风格切换切换到宽版
  • 8138阅读
  • 15回复

求助虎主 如何让播放音乐和水波纹同时出现 [复制链接]

上一主题 下一主题
离线电子高手
 

发帖
8
金钱
80
威望
8
只看楼主 倒序阅读 0 发表于: 2016-01-20



我想在安装向导自动播放音乐,安装向导图片上有水波纹效果,单独运行两段代码都可以,可是我把两端代码复制一起同时运行就提示错误,请虎版指教一下,谢谢!!

下面是我的代码

代码.rar (3 K) 下载次数:7

这是错误的截图

离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2016-01-21
你说单独运行两段代码都可以,那么请把两段代码单独贴出来,我好帮你检查你合并后的代码。
离线电子高手

发帖
8
金钱
80
威望
8
只看该作者 2 发表于: 2016-01-23
回 1楼(gnatix) 的帖子
谢谢虎版,我已经把单独的代码发上来。再次感谢你了!!
水波纹.rar (4 K) 下载次数:6
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 3 发表于: 2016-01-23
  1. ; 脚本由 Inno Setup 脚本向导 生成!
  2. ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!
  3. #ifdef UNICODE
  4.   #define A "W"
  5. #else
  6.   #define A "A"
  7. #endif
  8. #define MyAppName "我的程序"
  9. #define MyAppVersion "1.5"
  10. #define MyAppPublisher "我的公司"
  11. #define MyAppURL "http://www.example.com/"
  12. [Setup]
  13. ; 注: AppId的值为单独标识该应用程序。
  14. ; 不要为其他安装程序使用相同的AppId值。
  15. ; (生成新的GUID,点击 工具|在IDE中生成GUID。)
  16. AppId={{F06FAB78-8E91-4276-A880-ED1CE6299322}
  17. AppName={#MyAppName}
  18. AppVersion={#MyAppVersion}
  19. ;AppVerName={#MyAppName} {#MyAppVersion}
  20. AppPublisher={#MyAppPublisher}
  21. AppPublisherURL={#MyAppURL}
  22. AppSupportURL={#MyAppURL}
  23. AppUpdatesURL={#MyAppURL}
  24. DefaultDirName={pf}\{#MyAppName}
  25. DefaultGroupName={#MyAppName}
  26. OutputBaseFilename=setup
  27. Compression=lzma
  28. SolidCompression=yes
  29. [Languages]
  30. Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
  31. [Messages]
  32. ClickNext=单击“下一步”继续,或单击“取消”退出安装程序。%n%n%n%n%n%n%n%n本程序由陈相宇制作%n%n请于测试完成后24小时删除,否则后果自负!%n%n欢迎绣花爱好者共同讨论%n%nqq:108709796
  33. BeveledLabel=陈相宇制作,请于24小时内删除!
  34. [Files]
  35. Source: "D:\Uninstall\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
  36. Source: "D:\Richard.mp3"; Flags: dontcopy
  37. Source: "D:\waterctrl.dll"; Flags: dontcopy
  38. Source: "D:\InnoCallback.dll"; Flags: dontcopy
  39. Source: "D:\WizModernImage-Is.bmp"; Flags: dontcopy
  40. [Run]
  41. Filename: "{app}\CRACK\安装.bat"; Parameters: "/x"
  42. ; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”
  43. [Code]
  44. type
  45.   TTimerProc = procedure(h:longword; msg:longword; idevent:longword; dwTime:longword);
  46.   // 回调函数参数格式声明
  47. var
  48.   bmp: TBitmap;
  49. Function mciSendString(lpszCommand: String; lpszReturnString: Integer;
  50. cchReturnLength: Integer; hwndCallback: Integer): Integer;
  51. external 'mciSendString{#A}@winmm.dll stdcall';
  52. function WrapTimerProc(callback:TTimerProc; paramcount:integer):longword;
  53.      external 'wrapcallback@files:innocallback.dll stdcall';
  54. // 使用回调函数的主要入口转换函数.
  55. function SetTimer(hWnd: longword; nIDEvent, uElapse: longword; lpTimerFunc: longword): longword;
  56.      external 'SetTimer@user32.dll stdcall';
  57. // WinAPI 函数, 时间循环函数, 这个函数需要回调函数, 否则不能实现功能
  58. function enablewater(ParentWnd: HWND; Left, Top: integer; Bmp: HBITMAP;
  59.      WaterRadius, WaterHeight: integer): BOOL; external 'enablewater@files:waterctrl.dll stdcall';
  60. //ParentWnd     放置特效窗口的父窗口句柄。
  61. //Left          左位置
  62. //Top           上位置
  63. //Bmp           位图句柄。
  64. //WaterRadius   水纹半径,会令到水纹看起来范围更广。
  65. //WaterHeight   水纹高度,会令到水纹看起来更深。
  66. //注意,水纹插件自动根据图片来设定高度和宽度,
  67. //另外水纹底图必须是翻转的图片,显示的时候会翻转图片来显示。
  68. function waterblob(x, y: integer; radius, height: integer): BOOL; external 'waterblob@files:waterctrl.dll stdcall';
  69. // 在 x,y 点产生半径为radius, 高度为height 的水纹。
  70. function flattenwater(): BOOL; external 'flattenwater@files:waterctrl.dll stdcall';
  71. // 平伏所有水纹。
  72. function disablewater(): BOOL; external 'disablewater@files:waterctrl.dll stdcall';
  73. //释放水纹插件
  74. function setwaterparent(ParentWnd: HWND): BOOL; external 'setwaterparent@files:waterctrl.dll stdcall';
  75. //v2 新增,设置水纹插件的父句柄
  76. procedure mytimerproc(h:longword; msg:longword; idevent:longword; dwTime:longword);
  77. begin
  78.   waterblob(random(162), random(289), random(5), random(200));  // 随机产生小水纹
  79. end;
  80. procedure InitializeWizard();
  81. var
  82.   timercallback: longword;
  83.   BGMusicFile, SplashFile: string;
  84.   SplashForm: TForm;
  85.   SplashFileName: String;
  86.   I: Integer;
  87. begin
  88. ExtractTemporaryFile(ExtractFileName(ExpandConstant('{tmp}\Richard.mp3')));
  89. SplashForm := TForm.create(nil);
  90. with SplashForm do
  91.   begin
  92.   mciSendString(ExpandConstant('play {tmp}\Richard.mp3'),0,0,0);
  93.   Close;
  94.   Free;
  95.   end;
  96.   ExtractTemporaryFile('WizModernImage-Is.bmp');
  97.   bmp := TBitmap.create;
  98.   bmp.LoadFromFile(ExpandConstant('{tmp}\WizModernImage-Is.bmp'));
  99.   enablewater(WizardForm.WelcomePage.Handle, 0, 0, bmp.Handle, 3, 50);
  100.   timercallback := WrapTimerProc(@mytimerproc,4); // 转换 Inno Setup 的函数入口
  101.   settimer(0, 0, 200, timercallback);  // 实现 Timer 的循环重复调用函数效果
  102. end;
  103. procedure CurPageChanged(CurPageID: Integer);
  104. begin
  105.   if CurPageID = wpWelcome then
  106.   begin
  107.     setwaterparent(WizardForm.WelcomePage.Handle);
  108. //    waterblob(70, 198, 10, 1000);
  109.   end else
  110.   if CurPageID = wpFinished then
  111.   begin
  112.     setwaterparent(WizardForm.FinishedPage.Handle);
  113. //    waterblob(70, 198, 10, 1000);
  114.   end else
  115.     flattenwater();
  116. end;
  117. procedure DeinitializeSetup();
  118. begin
  119.   disablewater();
  120.   bmp.Free;
  121. end;


离线电子高手

发帖
8
金钱
80
威望
8
只看该作者 4 发表于: 2016-01-25
回 3楼(gnatix) 的帖子

非常感谢虎版,你的代码运行产生这样的问题,还要麻烦虎版指点一下啊!!

离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 5 发表于: 2016-01-25
你没有完全把我的代码用上啊,最上面的是:

#ifdef UNICODE
  #define A "W"
#else
  #define A "A"
#endif
离线电子高手

发帖
8
金钱
80
威望
8
只看该作者 6 发表于: 2016-01-25
回 5楼(gnatix) 的帖子


那串代码用上了,不知什么原因

离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 7 发表于: 2016-01-26
你复制代码时有问题,空格被复制成特殊字符了(就是显示为 ??的地方 )。建议复制代码时用 Ctrl+C,不要点击“复制代码”这个按钮。
离线电子高手

发帖
8
金钱
80
威望
8
只看该作者 8 发表于: 2016-01-26
回 7楼(gnatix) 的帖子
gnatix:你复制代码时有问题,空格被复制成特殊字符了(就是显示为 ??的地方 )。建议复制代码时用 Ctrl+C,不要点击“复制代码”这个按钮。 (2016-01-26 01:45) 

非常感谢虎版的耐心指导,已经能运行了!!相当感谢!

就是那个mp3放完就停掉了,能加个语句循环播放吗??谢谢

虎版能方便留个联系方式吗?微信qq都行!!万分感谢!!
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 9 发表于: 2016-01-27
增加了一个计时器,每隔50毫秒钟检查一次播放位置,如果播放位置超过音乐的播放长度,则又从头开始播放。
我这里试了没有问题,你自己试试吧。
  1. ; 脚本由 Inno Setup 脚本向导 生成!
  2. ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!
  3. #ifdef UNICODE
  4.   #define A "W"
  5. #else
  6.   #define A "A"
  7. #endif
  8. #define MyAppName "我的程序"
  9. #define MyAppVersion "1.5"
  10. #define MyAppPublisher "我的公司"
  11. #define MyAppURL "http://www.example.com/"
  12. [Setup]
  13. ; 注: AppId的值为单独标识该应用程序。
  14. ; 不要为其他安装程序使用相同的AppId值。
  15. ; (生成新的GUID,点击 工具|在IDE中生成GUID。)
  16. AppId={{F06FAB78-8E91-4276-A880-ED1CE6299322}
  17. AppName={#MyAppName}
  18. AppVersion={#MyAppVersion}
  19. ;AppVerName={#MyAppName} {#MyAppVersion}
  20. AppPublisher={#MyAppPublisher}
  21. AppPublisherURL={#MyAppURL}
  22. AppSupportURL={#MyAppURL}
  23. AppUpdatesURL={#MyAppURL}
  24. DefaultDirName={pf}\{#MyAppName}
  25. DefaultGroupName={#MyAppName}
  26. OutputBaseFilename=setup
  27. Compression=lzma
  28. SolidCompression=yes
  29. [Languages]
  30. Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
  31. [Messages]
  32. ClickNext=单击“下一步”继续,或单击“取消”退出安装程序。%n%n%n%n%n%n%n%n本程序由陈相宇制作%n%n请于测试完成后24小时删除,否则后果自负!%n%n欢迎绣花爱好者共同讨论%n%nqq:108709796
  33. BeveledLabel=陈相宇制作,请于24小时内删除!
  34. [Files]
  35. Source: "D:\Uninstall\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
  36. Source: "D:\Richard.mp3"; Flags: dontcopy
  37. Source: "D:\waterctrl.dll"; Flags: dontcopy
  38. Source: "D:\InnoCallback.dll"; Flags: dontcopy
  39. Source: "D:\WizModernImage-Is.bmp"; Flags: dontcopy
  40. [Run]
  41. Filename: "{app}\CRACK\安装.bat"; Parameters: "/x"
  42. ; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”
  43. [Code]
  44. type
  45.   TTimerProc = procedure(h:longword; msg:longword; idevent:longword; dwTime:longword);
  46.   // 回调函数参数格式声明
  47. var
  48.   bmp: TBitmap;
  49.   tm: TTimer;
  50. Function mciSendString(lpszCommand: String; lpszReturnString: String;
  51. cchReturnLength: Integer; hwndCallback: Integer): Integer;
  52. external 'mciSendString{#A}@winmm.dll stdcall';
  53. Function mciSendCommand(sCmd: String): LongInt;
  54. var
  55.   iResult: LongInt;
  56.   sReturn: String;
  57. begin
  58.   SetLength(sReturn,256);
  59.   iResult := mciSendString(sCmd, sReturn, Length(sReturn), 0);
  60.   Result := StrToInt(sReturn);
  61. end;
  62. procedure tmOnTimer(Sender: TObject);
  63. var
  64.   iCurPos, iLength: LongInt;
  65. begin
  66.   iCurPos := mciSendCommand('status MP3 position');  // 检查当前播放位置
  67.   iLength := mciSendCommand('status MP3 length');    // 检查音乐长度
  68.   if iCurPos >= iLength Then
  69.     mciSendCommand('play MP3 from 0');               // 如果播放位置超过长度则从头开始播放
  70. end;
  71. function WrapTimerProc(callback:TTimerProc; paramcount:integer):longword;
  72.      external 'wrapcallback@files:innocallback.dll stdcall';
  73. // 使用回调函数的主要入口转换函数.
  74. function SetTimer(hWnd: longword; nIDEvent, uElapse: longword; lpTimerFunc: longword): longword;
  75.      external 'SetTimer@user32.dll stdcall';
  76. // WinAPI 函数, 时间循环函数, 这个函数需要回调函数, 否则不能实现功能
  77. function enablewater(ParentWnd: HWND; Left, Top: integer; Bmp: HBITMAP;
  78.      WaterRadius, WaterHeight: integer): BOOL; external 'enablewater@files:waterctrl.dll stdcall';
  79. //ParentWnd     放置特效窗口的父窗口句柄。
  80. //Left          左位置
  81. //Top           上位置
  82. //Bmp           位图句柄。
  83. //WaterRadius   水纹半径,会令到水纹看起来范围更广。
  84. //WaterHeight   水纹高度,会令到水纹看起来更深。
  85. //注意,水纹插件自动根据图片来设定高度和宽度,
  86. //另外水纹底图必须是翻转的图片,显示的时候会翻转图片来显示。
  87. function waterblob(x, y: integer; radius, height: integer): BOOL; external 'waterblob@files:waterctrl.dll stdcall';
  88. // 在 x,y 点产生半径为radius, 高度为height 的水纹。
  89. function flattenwater(): BOOL; external 'flattenwater@files:waterctrl.dll stdcall';
  90. // 平伏所有水纹。
  91. function disablewater(): BOOL; external 'disablewater@files:waterctrl.dll stdcall';
  92. //释放水纹插件
  93. function setwaterparent(ParentWnd: HWND): BOOL; external 'setwaterparent@files:waterctrl.dll stdcall';
  94. //v2 新增,设置水纹插件的父句柄
  95. procedure mytimerproc(h:longword; msg:longword; idevent:longword; dwTime:longword);
  96. begin
  97.   waterblob(random(162), random(289), random(5), random(200));  // 随机产生小水纹
  98. end;
  99. procedure InitializeWizard();
  100. var
  101.   timercallback: longword;
  102.   BGMusicFile, SplashFile: string;
  103.   SplashForm: TForm;
  104.   SplashFileName: String;
  105.   I: Integer;
  106. begin
  107.   tm:= TTimer.Create(WizardForm);
  108.   tm.Enabled:= false;
  109.   tm.Interval:= 50;
  110.   tm.OnTimer:= @tmOnTimer;
  111.   ExtractTemporaryFile('Richard.mp3');
  112.   mciSendString('open "' + ExpandConstant('{tmp}\Richard.mp3') + '" alias MP3', '', 0, 0);
  113.   SplashForm := TForm.create(nil);
  114.   with SplashForm do
  115.     begin
  116.     mciSendCommand ('play MP3 from 0');
  117.     tm.Enabled:= true;
  118.     Close;
  119.     Free;
  120.     end;
  121.   ExtractTemporaryFile('WizModernImage-Is.bmp');
  122.   bmp := TBitmap.create;
  123.   bmp.LoadFromFile(ExpandConstant('{tmp}\WizModernImage-Is.bmp'));
  124.   enablewater(WizardForm.WelcomePage.Handle, 0, 0, bmp.Handle, 3, 50);
  125.   timercallback := WrapTimerProc(@mytimerproc,4); // 转换 Inno Setup 的函数入口
  126.   settimer(0, 0, 200, timercallback);  // 实现 Timer 的循环重复调用函数效果
  127. end;
  128. procedure CurPageChanged(CurPageID: Integer);
  129. begin
  130.   if CurPageID = wpWelcome then
  131.   begin
  132.     setwaterparent(WizardForm.WelcomePage.Handle);
  133. //    waterblob(70, 198, 10, 1000);
  134.   end else
  135.   if CurPageID = wpFinished then
  136.   begin
  137.     setwaterparent(WizardForm.FinishedPage.Handle);
  138. //    waterblob(70, 198, 10, 1000);
  139.   end else
  140.     flattenwater();
  141. end;
  142. procedure DeinitializeSetup();
  143. begin
  144.   disablewater();
  145.   bmp.Free;
  146. end;