inno 实现水波特效

  安装Inno Setup时如果选择了水波效果插件(如下图),将在Inno Setup的安装目录下自带有水波特效的例子,如路径:C:\Program Files (x86)\Inno Setup 5\Examples\下的WaterLib_Example.iss。

  

   

  以下是我在原例子的基础上修改得到的非增强版可用的精简代码:

  1 ; 脚本由 Inno Setup 脚本向导 生成!
  2 ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!
  3 #include "compiler:WaterLib.iss"
  4 
  5 #define MyAppName "我的程序"
  6 #define MyAppVersion "1.5"
  7 #define MyAppPublisher "我的公司"
  8 #define MyAppURL "http://www.example.com/"
  9 #define MyAppExeName "MyProg.exe"
 10 
 11 [Setup]
 12 ; 注: AppId的值为单独标识该应用程序。
 13 ; 不要为其他安装程序使用相同的AppId值。
 14 ; (生成新的GUID,点击 工具|在IDE中生成GUID。)
 15 AppId={{F40EA292-5A4E-41EB-9819-7D426D45A468}
 16 AppName={#MyAppName}
 17 AppVersion={#MyAppVersion}
 18 ;AppVerName={#MyAppName} {#MyAppVersion}
 19 AppPublisher={#MyAppPublisher}
 20 AppPublisherURL={#MyAppURL}
 21 AppSupportURL={#MyAppURL}
 22 AppUpdatesURL={#MyAppURL}
 23 DefaultDirName={pf}\{#MyAppName}
 24 DisableProgramGroupPage=yes
 25 OutputBaseFilename=WaterExp
 26 Compression=lzma
 27 SolidCompression=yes
 28 DisableWelcomePage=no
 29 WizardImageFile=compiler:WizModernImage-Is.bmp
 30 WizardSmallImageFile=compiler:WizModernSmallImage-Is.bmp
 31 [Languages]
 32 Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
 33 
 34 [Tasks]
 35 Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
 36 
 37 [Files]
 38 ;Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
 39 Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy noencryption
 40 ;Source: demo.bmp; DestDir: {tmp}; Flags: dontcopy noencryption
 41 ; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”
 42 
 43 [Icons]
 44 Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
 45 Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
 46 
 47 [Code]
 48 
 49 Const
 50   DrawTextMoveDemo = '动态移动演示'; 
 51   
 52 type
 53  TTimerProc = procedure(H: LongWord; MSG: LongWord; idEvent: LongWord; dwTime: LongWord);
 54 function WrapTimerProc(CallBack: TTimerProc; ParamCount: Integer): LongWord; external 'InnoCallback@files:InnoCallBack.dll stdcall';
 55 function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
 56 
 57 var
 58   MoveB_X, MoveT_Y: Integer;
 59   DrawBitmapDemo: TBitmap;
 60   WaterHandle:Integer;
 61   
 62 procedure MyTimerProc(H: LongWord; MSG: LongWord; idEvent:LongWord; dwTime:LongWord);
 63 begin
 64   MoveT_Y := MoveT_Y + 1;
 65   If MoveT_Y >= WizardForm.WizardBitmapImage.Height then MoveT_Y := 0;
 66   WaterDrawText(WaterHandle, 1, 50, MoveT_Y, DrawTextMoveDemo);
 67 
 68   MoveB_X := MoveB_X + 1;
 69   If MoveB_X >= WizardForm.WizardBitmapImage.Width then MoveB_X := 0 - DrawBitmapDemo.Width;
 70   WaterDrawBitmap(WaterHandle, 1, MoveB_X, 80, DrawBitmapDemo.Handle, True,  clDefault);
 71 end;
 72 
 73 procedure InitializeWizard();
 74 var
 75   F: AnsiString;
 76   TimerCallBack: LongWord;
 77 begin
 78   WaterSupportAuthor(True);
 79   //支持本人作品, 建议开启标识显示.
 80   //只有开启该功能后, 才可以使用WaterDraw****相关API的功能
 81 
 82   //创建水波特效
 83   F:= ExpandConstant('{tmp}\WizardImage.bmp');
 84   WizardForm.WizardBitmapImage.Bitmap.SaveToFile(F);
 85   WaterHandle := WaterInit(WizardForm.WelcomePage.Handle, 2, 2);
 86   WaterSetBounds(WaterHandle, WizardForm.WizardBitmapImage.Left, WizardForm.WizardBitmapImage.Top, WizardForm.WizardBitmapImage.Width, WizardForm.WizardBitmapImage.Height);
 87   WaterSetFile(WaterHandle, AnsiString(F));
 88   WaterSetActive(WaterHandle, True);
 89   DeleteFile(F);
 90 
 91   //竖向移动的文本
 92   MoveT_Y := 0;
 93   WaterDrawTextBrush(WaterHandle, 1, clBlack, bsClear);
 94   WaterDrawTextFont(WaterHandle, 1, '宋体', 12, clYellow, 134);
 95   WaterDrawText(WaterHandle, 1, 50, MoveT_Y, DrawTextMoveDemo);
 96   
 97   //横行移动的位图
 98   MoveB_X := 0;
 99   DrawBitmapDemo:= TBitmap.Create;
100   DrawBitmapDemo.LoadFromFile(ExpandConstant('{commonappdata}\Microsoft\User Account Pictures\guest.bmp'));
101   //ExtractTemporaryFile('demo.bmp');
102   //DrawBitmapDemo.LoadFromFile(ExpandConstant('{tmp}\demo.bmp'));
103   WaterDrawBitmap(WaterHandle, 1, MoveB_X, 80, DrawBitmapDemo.Handle, True, clDefault);
104   
105   //创建动态显示文本或位图的定时器
106   TimerCallBack := WrapTimerProc(@MyTimerProc, 4);
107   SetTimer(0, 0, 100, TimerCallBack);
108 end;
109 
110 procedure CurPageChanged(CurPageID: Integer);
111 begin
112   Case CurPageID of
113     wpWelcome : WaterSetParentWindow(WaterHandle, WizardForm.WelcomePage.Handle);  //将水波移动到另一个句柄上
114     wpFinished: WaterSetParentWindow(WaterHandle, WizardForm.FinishedPage.Handle); //将水波移动到另一个句柄上
115   end;
116 end;
117 
118 //释放所有水波对象
119 procedure DeinitializeSetup();
120 begin
121   WaterAllFree;
122 end;

 效果如下:

 

posted @ 2017-01-05 15:18  hbcdr  阅读(417)  评论(0编辑  收藏  举报