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
评论: 30 | 引用: 0 | 查看次数: 18980
dejoy [2008-06-03 06:45 PM]
再仔细一看,英文下也不正常,图片被放大,下面有部分显示不出来,右面图片伸展出遮住了右边显示的文字
dejoy [2008-06-03 06:39 PM]
唉! 我高兴得太早了,没仔细看.现在才发现改成标准的164 x 314后,选择英文下是正常的了,可选择中文却又不正常了,这次和上次相反,是显示的时候被截去了一截下面有一部分不见了.
如果不使用水纹效果图片显示是正确的,不知是watelib还是inno的问题,再请作者看看吧.
dejoy [2008-06-03 06:30 PM]
原来如此啊!太巧了,你的示例图片短了一截,我的图片也短了一截,选择英文语言都显示不正常,我还以为是BUG呢!
改成你说的标准分辨率就OK了!
xin [2008-06-02 11:20 PM]
测试的时候我把图片截短了, Inno Setup 的原图比我的例子中的那个图要稍长几十像素。你可以找原图来对照看看大小。
Inno Setup 的图也考虑到了适应不同语言会影响窗口大小,所以它的图的大小都是在中文窗口中显得稍大的,标准 Inno Setup 图片是 164 x 314 x 8bit,请按照这个大小来做图吧。
xin [2008-06-02 11:04 PM]
XP下无论何种语言都没问题。
另外
请看注释!!!
引用内容 引用内容

//注意,水纹插件自动根据图片来设定高度和宽度,


该知道怎么做了吧,找个足够适应所有窗口的图片。
dejoy [2008-06-02 09:07 PM]
无法上传示例和发布网盘地址,被屏蔽了,可至my.mofile.com/dejoy 里inno下载BUG示例,也可至delphi7lite里看我使用你的插件效果的bug,非常明显。
dejoy [2008-06-02 09:01 PM]
报告一个BUG:
如果有非中文的语言界面,水滴图片最下部分就会显示错误,即显示的不完整,会比图片多出一截。中文语言界面则能完美显示。
附上示例iss。
xin [2008-05-31 01:44 PM]
引用来自 dejoy 引用来自 dejoy
报告一个BUG,安装时只能在第一页显示水纹,安装完成页的图片却不是水纹的,请作者修正解决此问题,和第一页一样的效果.

已添加了一个可以设置父窗口的函数处理。
dejoy [2008-05-31 05:05 AM]
报告一个BUG,安装时只能在第一页显示水纹,安装完成页的图片却不是水纹的,请作者修正解决此问题,和第一页一样的效果.
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]标签 关闭