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 | 查看次数: 18979
Fabse [2018-07-25 02:55 PM]
Hi mate! great work on waterctrl.dll!but when i wanna use it on bmps bigger then 600x500px it abborts is it possible to use bigger pictures?
regards and greetings from germany!!
X [2018-07-15 03:33 AM]
Do you plan to make a 64-Bit version?
dejoy [2008-06-04 10:32 PM]
经过多次详细测试,原来问题是出在inno编译器上,总结如下:
Inno 编译器中的WizardImageStretch属性(自动调整向导图大小)选项并不是很有效,具体表现就是:
1.中文版INNO编译器只能处理高度为289象素的向导图,超过289的部分会被截掉,显示不出来.
2.英文版INNO编译器只能处理高度为314象素的向导图,小于314的部分会空出来,不会被拉伸,效果就是图片下面空出了一截(314-实际图片高度象素).

终于搞清楚原因了
xin [2008-06-04 07:58 PM]
所以这个事情的解决方法,不是让插件去适应,而是如果你需要进行多语言安装程序就必须自己写脚本去适应,这并不是插件要处理的问题,我做插件只遵循一个规则,就是它是实现什么功能就只去做什么功能就足够了,其他多余的东西不是我应该做的,因为插件体积要越小才越好,能用脚本实现的就绝对不会在插件里实现,看看 NSIS 的插件吧,精要所在,绝对不会多余到连脚本能做的功能都去做,除非这样做能减少大量的脚本编写。我用 VC 来做插件也因为它能尽可能体积小,所以无论如何,插件是不会像做软件那样把功能做大做全的,我做软件是不会考虑软件体积大小的,但是插件我肯定不会加些多余的功能进去。
dejoy [2008-06-04 07:40 PM]
终于发完了,在这个 屏蔽系统的XX下,花了我近十分钟,经过不断的尝试和修改,终于发完啦!
dejoy [2008-06-04 07:38 PM]
继续
我也许应该称为 "缺陷或问题" 更为贴切些,虽然作为使用者的我无需也无法判断是否是你的作品引起的,只是如实的反馈使用过程中出现的问题,在很多软件的反馈系统中,这部分功能被称作是"错误报告或BUG报告"吧,当然了决定权在作者,作者认为是就是,不是就不是了
dejoy [2008-06-04 07:37 PM]
BUG词意见bai度百科, "后来,Bug这个名词就沿用下来,表示电脑系统或程序中隐藏的错误、缺陷、漏洞或问题。 "
自己搜吧,服了,连bai度这词也属被屏蔽之列
dejoy [2008-06-04 07:35 PM]
关于BUG这词, 并非 "可能你认为不能满足你要求的就算软件的 BUG",我并非如此认为.
dejoy [2008-06-04 07:34 PM]
没法了,发一点算一点,接前面.
dejoy [2008-06-04 07:31 PM]
谢xin的这次长篇回帖,从编程理论的观点论述了多字节到多语言~~ 从底层分析了可能产生的原因,真是博大精深,不过这些都不重要了,因为我已经如前述用最简单的办法解决了问题,至于什么单字节双字节多语言的还是留给高手去研究吧~ 对于像我这样的使用者来说,只要能产生正常的结果就好了,方法不一定最重要,虽然解决的办法可能笨了点.

又被屏蔽了,没法,只有一点一试一发了.
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: 验证码
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 5000 字 | UBB代码 开启 | [img]标签 关闭