Inno Setup 插件:水纹特效(V2)


尝试实现,的确遇到了比普通插件更难处理的问题。所以才认真的做了一下。
引用来自  test.iss,2008-5-31 引用来自 test.iss,2008-5-31
; -- test.iss --
; restools
; http://restools.hanzify.org
; 时间仓促,所以可能会有点谬误,如有错误可以提出
; waterctrl.dll 为一个用于 Inno Setup 的 16.5 KB 的水纹特效插件。
; 需要注意,插件使用 MFC, 系统需要有 mfc42.dll,不过一般系统自带。

; v2 版本  新增设置水纹插件的父句柄

[Setup]
AppName=我的程序
AppVerName=我的程序 版本 1.5
DefaultDirName={pf}\我的程序
DefaultGroupName=我的程序
UninstallDisplayIcon={app}\MyProg.exe
Compression=lzma

[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
Source: "waterctrl.dll"; Flags: dontcopy
Source: "WizModernImage-Is.bmp"; Flags: dontcopy

[Icons]
Name: "{group}\我的程序"; Filename: "{app}\MyProg.exe"

[code]

function enablewater(ParentWnd: HWND; Left, Top: integer; Bmp: HBITMAP;
     WaterRadius, WaterHeight: integer): BOOL; external 'enablewater@files:waterctrl.dll stdcall';
//ParentWnd     放置特效窗口的父窗口句柄。
//Left          左位置
//Top           上位置
//Bmp           位图句柄。
//WaterRadius   水纹半径,会令到水纹看起来范围更广。
//WaterHeight   水纹高度,会令到水纹看起来更深。
//注意,水纹插件自动根据图片来设定高度和宽度,
//另外水纹底图必须是翻转的图片,显示的时候会翻转图片来显示。

function waterblob(x, y: integer; radius, height: integer): BOOL; external 'waterblob@files:waterctrl.dll stdcall';
// 在 x,y 点产生半径为radius, 高度为height 的水纹。

function flattenwater(): BOOL; external 'flattenwater@files:waterctrl.dll stdcall';
// 平伏所有水纹。

function disablewater(): BOOL; external 'disablewater@files:waterctrl.dll stdcall';
//释放水纹插件

function setwaterparent(ParentWnd: HWND): BOOL; external 'setwaterparent@files:waterctrl.dll stdcall';
//v2 新增,设置水纹插件的父句柄

var
  
bmp: TBitmap;

procedure InitializeWizard();
begin
  
ExtractTemporaryFile('WizModernImage-Is.bmp');
  bmp := TBitmap.create;
  bmp.LoadFromFile(ExpandConstant('{tmp}\WizModernImage-Is.bmp'));

  enablewater(WizardForm.WelcomePage.Handle, 0, 0, bmp.Handle, 3, 50);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if
CurPageID = wpWelcome then
  begin
    
setwaterparent(WizardForm.WelcomePage.Handle);
    waterblob(70, 198, 10, 1000);
  end else
  if
CurPageID = wpFinished then
  begin
    
setwaterparent(WizardForm.FinishedPage.Handle);
    waterblob(70, 198, 10, 1000);
  end else
    
flattenwater();
end;

procedure DeinitializeSetup();
begin
  
disablewater();
  bmp.Free;
end;


点击下面连接下载例子。
http://restools.hanzify.org/inno/waterctrl/inno_waterctrl_v2.zip



[本日志由 xin 于 2008-05-31 01:42 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: Inno Setup waterctrl Plugin
评论: 31 | 引用: 0 | 查看次数: 20048
lorndragon [2008-05-06 06:55 AM]
Set_MUI_InstallShield 过程修改一点就完美了

修改:
  //欢迎信息移上一点 Top-50
  WizardForm.WELCOMELABEL1.SetBounds(63, 69, 437, 42);
  //缩小一点协议Memo,移动 同意与不同意 由原来的左右摆改为上下摆放
  WizardForm.LICENSELABEL1.SetBounds(64, 20, 437, 280);
  WizardForm.LICENSEACCEPTEDRADIO.SetBounds(64, 312, 150, 16);
  WizardForm.LICENSENOTACCEPTEDRADIO.SetBounds(64, 332, 150, 16);
  //选择目录的信息框 加大一点宽度
  WizardForm.DISKSPACELABEL.SetBounds(72, 277, 220, 14);

增加:
  //目录不可编辑只能选择
  WizardForm.DIREDIT.ReadOnly := True;
  //准备安装的信息框背景色改为白色
  WizardForm.READYMEMO.Color := clWhite;
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: 验证码
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 5000 字 | UBB代码 开启 | [img]标签 关闭