<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[RESTOOLS]]></title>
  <subtitle type="html"><![CDATA[随缘]]></subtitle>
  <id>http://restools.hanzify.org/</id> 
  <link rel="alternate" type="text/html" href="http://restools.hanzify.org/" /> 
  <link rel="self" type="application/atom+xml" href="http://restools.hanzify.org/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.4.1022">PJBlog2</generator> 
  <updated>2012-01-12T21:30:26+08:00</updated> 

  <entry>
	  <title type="html"><![CDATA[Inno Setup 编译器编辑功能增强版 (build 120112)]]></title>
	  <author>
		 <name>xin</name>
		 <uri>http://restools.hanzify.org/</uri>
		 <email>restools@21cn.com</email>
	  </author>
	  <category term="" scheme="http://restools.hanzify.org/default.asp?cateID=4" label="NSIS &amp; InnoSetup" /> 
	  <updated>2012-01-12T21:30:26+08:00</updated>
	  <published>2012-01-12T21:30:26+08:00</published>
		  <summary type="html"><![CDATA[把<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>中的编译器编辑程序 Compil32.exe 进行的部分修改，使它尽量适合 <span style="color:Black">[</span>code<span style="color:Black">]</span> 段代码的编写。<br/>:) <br/>PS: 以后的修改方向是把 <span style="color:Black">[</span>code<span style="color:Black">]</span> 段的代码编写变得更容易，但是不会费时间实现<a href="http://www.istool.org" target="_blank"> ISTool </a>一样的功能。因为实在是太花时间了，一般如果动用到这个编译器来编辑脚本，都是因为要调试 <span style="color:Black">[</span>code<span style="color:Black">]</span> 段代码的。<br/><strong>附图：</strong><br/><img src="http://restools.hanzify.org/inno/pic/p110207_1.png" border="0" alt=""/><br/><br/><img src="http://restools.hanzify.org/inno/pic/p110207_2.png" border="0" alt=""/><br/><br/><img src="http://restools.hanzify.org/inno/pic/p110207_3.png" border="0" alt=""/><br/><br/><strong><span style="color:red">build 050925</span></strong><br/><span style="color:blue">1. 基于<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>5.1.5 重新编译。<br/>2. 在编译级别汉化本程序，汉化资源使用了莫名的汉化资源，在此感谢莫名提供汉化资源，减少了本人不少的工作量。<br/>3. 稍微修改了调试时的显示方式。跟 Delphi 更加的接近。<br/>4. 增加部分的关键字，参数的高亮显示，跟 ISTOOL 相同。<br/>5. 增加复制为 UBB 代码的功能，方便论坛发帖使用。<br/>6. 为方便编程控制事件，把里面部分控件换为 Delphi 5.0 有的更高级的控件。</span><br/><br/><strong><span style="color:red">build 051002</span></strong><br/><span style="color:blue">1. 修正向导中的一个BUG。(汉化时产生)<br/>2. 加入代码模板功能。可以快速输入 INNO 一些常用代码，可自己添加。<br/>(例如: 你有一些经常使用的代码，你可以为它们建立自己的代号，然后就很容易快速输入该段代码)</span><br/><strong>附图：</strong><br/><img src="http://restools.hanzify.org/inno/pic/p051002.gif" border="0" alt=""/><br/><br/><strong><span style="color:red">build 080428</span></strong><br/><span style="color:blue">1.添加一个代码分析视图，所有区段分析。code 段是重点，因为实现自动完成代码功能的前期工作都在这个视图中实现了，包括每个 procedure 和 function 的局部变量也被枚举了出来，只是没有在视图中显示。<br/>2.修正中文显示问题。<br/>3.改善一些界面上的显示。</span><br/><strong>附图：</strong><br/><img src="http://restools.hanzify.org/inno/pic/p080428.jpg" border="0" alt=""/><br/><span style="color:blue">1. 区段分析。<br/>2. 必须选项。<br/>3. record 类型。<br/>4. 全局 var 变量。<br/>5. 全局 const 常量。<br/>6. procedure 分析。<br/>7. funciton 分析。<br/>8. 内部支持过程。<br/>9. 结构有问题的 function 或者 procedure。</span><br/><br/><strong><span style="color:red">build 080502</span></strong><br/><span style="color:Blue">1.添加书签标记。<br/>2.开放了大部分在<a href="http://restools.hanzify.org/article.asp?id=43" target="_blank"> VNISEdit </a>中同样存在的编辑器选项。<br/>3.显示缩进竖线，方便代码阅读。<br/>4.修正部分编辑器的显示问题。</span><br/><strong>附图：</strong><br/><img src="http://restools.hanzify.org/attachments/month_0805/320085202245.gif" border="0" alt=""/><br/><img src="http://restools.hanzify.org/attachments/month_0805/m20085202315.gif" border="0" alt=""/><br/><br/><strong><span style="color:red">build 080503</span></strong><br/><span style="color:Blue">1.添加列块缩进处理，Tab 和 Shift+Tab 快捷键。<br/>2.添加注释选择文本功能，“;”和“/”控制，会自动检测所属区段的注释是用“;”还是“/”符号。只需要按“;”或者“/”键即可按照所属区段所使用的注释符号注释大量文本。<br/>2.开放了编辑器语法颜色选项。<br/>3.添加另存为 HTML 格式。并且开放 UBB 和 HTML 复制的几个选项。</span><br/><strong>附图：</strong><br/><img src="http://restools.hanzify.org/attachments/month_0805/g200853153245.gif" border="0" alt=""/><br/><br/><strong><span style="color:red">build 080508</span></strong><br/><span style="color:Blue">1.添加对 set of(集合) 和 array of(数组) 结构的代码分析。<br/>2.开放视图的高级提示，可显示过程函数明细，例如局部变量。(菜单中打开此功能)<br/>3.添加对 Bracket 的支持。包括 begin, end, (, ),的对应。如果你用过 Visual Assist X ，就知道这个功能对于代码编写有多大的作用。颜色设置里面也可以设置该功能的颜色。错误配对也会显示红色。</span><br/><img src="http://restools.hanzify.org/attachments/month_0805/m200858213016.jpg" border="0" alt=""/><br/><br/><strong><span style="color:red">build 080511</span></strong><br/><span style="color:Blue">1.完善 Type, var 代码结构分析。<br/>2.添加 try end 配对显示。<br/>3.恢复功能：拖放文件，ESC 关闭查找替换窗口。</span><br/><br/><strong><span style="color:red">build 080513</span></strong><br/><span style="color:Blue">1.修正配对显示在自动换行下的显示问题。<br/>2.添加 Type , var 中关于 function 和 procedure 的定义。至此，基本完成了<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>所有我知道的定义类型的视图分析，如果还有未能正确分析的请告诉我。<br/>3.添加 HotLink 实现技术，但是目前并无实际效用，因为并未加诸应用。以后将会用在变量，函数，类型，过程等等的跳转。同样能够进行颜色设定。(功能键：Ctrl + 鼠标左键点击，类似 Delphi)<br/>4.修正编辑器粘贴时的显示问题。</span><br/><br/><strong><span style="color:red">build 080519</span></strong><br/><span style="color:Blue">1.修正显示、操作问题，尤其在 Win98 下测试发现的问题一并处理。<br/>2.修正新版本 SynEdit 控件的 BUG，包括语法高亮，覆盖编辑，撤销重做问题。<br/>3.添加一页，内部支持函数，过程，类，的声明页面，不可编辑，只是以后用来作为脚本跳转时源头，自动完成列表提取源头。<br/>4.修正多 code 段时的处理方法。</span><br/><br/><strong><span style="color:red">build 080525</span></strong><br/><span style="color:Blue">1.修正代码模版的执行方法，撤消重做无论在任何编辑器选项下都能正常使用了。并且增加模版每一项的描述。所以之前的模版文件在这版本中不能使用，需要替换掉。<br/>2.修正双击选择中文的问题。<br/>3.更改除 code 段外所有区段代码的分析算法，力求更高效和更完整的分析，以备以后有需要的时候使用，可能以后会拿 Setup 段来实现<a href="http://www.istool.org" target="_blank"> ISTool </a>的功能，不过不会扩展到所有区段，这部分是无责任烂尾，只是用来实验<a href="http://www.istool.org" target="_blank"> ISTool </a>如何实现功能而已。开放了所有区段的高级视图提示。<br/>4.改善切换页面时的效率问题。<br/>5.经测试后，之前版本存在严重内存泄漏问题，这版本基本去除已发现的内存泄漏，不过线程处理很容易造成内存偶尔泄漏，所以接下来需要长时间的压力测试。就目前来说未再发现泄漏。</span><br/><br/><strong><span style="color:red">build 080530</span></strong><br/><span style="color:Blue">1.修正一个视图显示的问题。<br/>2.修正一个 begin end 配对的显示问题。<br/>3.增加一个当前光标竖线颜色设置的选项，对于我自己来说，经常编写多层 begin end 代码，所以我最终还是忍受不住太多的竖线仍然让我看得眼花缭乱，必须把我想知道的竖线加深颜色以便查看。<br/>4.模板菜单中显示模板的描述，可方便初期使用时知道那些缩写究竟代表什么代码。<br/>5.修正批量注释时的处理方法。<br/>6.修正多处视图错误分析。<br/>7.自动参数提示，包括内部支持过程函数和当前编辑脚本中的过程函数的参数提示。至于“#include”的包含文件方式，以后会想办法解决。</span><br/><br/><strong><span style="color:red">build 080608</span></strong><br/><span style="color:Blue">1.实现了近乎完美的弹出参数提示算法，已经能在任何输入下(包括中间夹杂了，字符串，注释，内含括号的计算公式，函数中再包含函数等等的影响)，都能正确标注出当前的要输入的第几项参数，同时也允许在换行输入下继续提示参数而不再消失。<br/>2.修正编辑器的中文显示问题。<br/>3.增加<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>内部支持类成员函数和过程的参数弹出提示，Cr&#101;ateOleObject 创建的 Com 对象除外，至此，基本建立了一个较为完整的检索类声明的分析体系，想来接下来的弹出列表应该问题不大了，with do 结构以后想办法处理。<br/>4.在内部支持页中补全了所有支持的类型，变量，常量声明，部分在帮助中并未提及。<br/>5.修正常量声明语法分析和部分视图分析的问题。</span><br/><br/><strong><span style="color:red">build 080609</span></strong><br/><span style="color:Blue">1.修正在无语法高亮时的中文显示问题。<br/>2.增加内部支持类所属的属性，过程，函数的自动完成列表。</span><br/><img src="http://restools.hanzify.org/attachments/month_0806/q200869154414.gif" border="0" alt=""/><br/><br/><strong><span style="color:red">build 080618</span></strong><br/><span style="color:Blue">1.修正参数提示弹出算法。<br/>2.修正属性列表显示问题，弹出算法，支持 function 返回类的弹出列表，例如<br/>&nbsp;&nbsp;Cr&#101;ateInputQueryPage(AfterID,ACaption,ADescription,ASubCaption).Description<br/>&nbsp;&nbsp;这样的返回类弹出列表，支持 function 和 Class 混合语法分析弹出属性列表和函数参数提示，例如这种 <br/>&nbsp;&nbsp;function_return_class().property_return_class.property_function() 。<br/>&nbsp;&nbsp;所以把 Mainform 和 WizardForm 声明修正为 function。<br/>3.增加“function UninstallProgressForm: TUninstallProgressForm;”声明，使 UninstallProgressForm 能正常使用参数弹出和属性列表弹出。<br/>4.增加弹出列表排序功能。</span><br/><br/><strong><span style="color:red">build 080628</span></strong><br/><span style="color:Blue">1.修正函数参数弹出算法。同时增加快捷键 Ctrl+Shift+Space 激活参数提示。<br/>2.当行后无字符时，当输入“(”的时候，同时检测到之前的标识符属于支持函数，将会自动补充一个“)”字符。<br/>3.增加 #include 包含文件中的代码分析。支持多层包含文件代码分析，例如在一个包含文件中又包含另外一个包含文件。包含文件被修改后，重新返回该编辑器编辑的时候也会自动更新代码分析，当检测到包含文件循环崁套或者多次包含都只会载入一次以避免进入死循环。</span><br/><br/><strong><span style="color:red">build 080724</span></strong><br/><span style="color:Blue">1.当输入“@”符号时，提供当前声明的 proc 和 func 列表以供选择。<br/>2.调整在 proc 和 func 定义错误时的局部变量和全局变量的判断。尽可能的避免局部变量的定义变成了全局变量定义。<br/>3.修正参数弹出算法，调整参数显示算法，当太多参数的时候，会自动根据屏幕宽度调整参数换行。<br/>4.增加一个打开当前脚本文件夹的菜单。<br/>5.修正最后一个 function 段的分析。<br/>6.修正 Chr 和 o&#114;d 的声明分析。<br/>7.增加 record 类型的成员弹出列表。<br/>8.允许列表弹出设置弹出延迟时间。<br/>9.增加编辑器一些选项。例如设置成较为女性化的编辑器底色。</span><br/><br/><strong><span style="color:red">build 080921</span></strong><br/><span style="color:Blue">仍然没有增加新的功能，只是修正大量错误。这里不一一细述了。<br/>稍微调整的就是能自动分辨增强版编译器，以使用新的声明。</span><br/><br/><strong><span style="color:red">build 090110</span></strong><br/><span style="color:Blue">1.with do 结构分析。支持多层 with do 结构分析。<br/>2.修正多处参数，属性列表弹出代码分析错误算法，更加精准。<br/>3.改善 Vista 下的界面显示效果。</span><br/><img src="http://restools.hanzify.org/attachments/month_0901/n2009110215917.gif" border="0" alt=""/><br/><br/><strong><span style="color:red">build 090115</span></strong><br/><span style="color:Blue">1.with do 结构分析: 能够分析诸如 with TButton.Cr&#101;ate(WizardForm) do 这样的结构<br/>2.增加 2 种关键字匹配方式，务求更快捷的输入代码。<br/><img src="http://restools.hanzify.org/attachments/month_0901/e2009115183343.gif" border="0" alt=""/><br/>3.改善 Vista 下的界面显示效果。</span><br/><br/><strong><span style="color:red">build 090215</span></strong><br/><span style="color:Blue">1.改善部分语法分析，不过目前来说仍然有不太完善的地方，慢慢改。<br/>2.增加所有标识符的弹出列表。编辑器选项中可以设置弹出延迟时间。<br/><img src="http://restools.hanzify.org/attachments/month_0902/02009215222448.gif" border="0" alt=""/><br/>3.如果上面的弹出列表显得太厌烦可以关闭自动弹出，已经增加了快捷键 Ctrl+J 弹出列表。<br/>4.高亮当前行。选项可以设置是否高亮。<br/>5.补充完整一些常量，类型声明。</span><br/><br/><strong><span style="color:red">build 090308</span></strong><br/><span style="color:Blue">1.修正部分语法分析算法，处理 with do 结构内的所有标识符弹出列表算法。<br/>2.添加窗口菜单以方便切换到已经打开的脚本。<br/>3.解决了进程间的通信方式问题，将会自动检索已经打开的脚本，不会重复打开。<br/>（这也是代码跳转，乃至脚本间代码跳转的前期工作）<br/>4.添加支持 FullVCL 编译版本的编译器内核的所有弹出列表的处理。</span><br/><br/><strong><span style="color:red">build 090319</span></strong><br/><span style="color:Blue">1.修正部分语法分析算法。<br/>2.修正几处列表弹出算法。<br/>3.窗口激活，窗口切换。窗口重排。<br/>4.代码跳转算法，可以遍及整个 Code 段的代码跳转。包括，函数，参数，局部变量，全局<br/>&nbsp;&nbsp;变量，记录，类型，集合，控件类、属性、函数。包含文件的脚本间的代码跳转也一并实现。<br/>&nbsp;&nbsp;(使用方法：Ctrl + Mouse Click)</span><br/><img src="http://restools.hanzify.org/attachments/month_0903/i2009319205738.GIF" border="0" alt=""/><br/><br/><strong><span style="color:red">build 090505</span></strong><br/><span style="color:Blue">1.修正部分语法分析算法。<br/>2.修正几处列表自动完成算法。<br/>3.改善一些界面效果。<br/>4.处理代码段所有标识符的提示，分为调试状态和非调试状态，在非调试状态下，提示同样遍及整个 Code 段的代码提示。包括，函数，参数，局部变量，全局变量，记录，类型，集合，控件类、属性、函数。</span><br/><img src="http://restools.hanzify.org/attachments/month_0905/5200955223636.GIF" border="0" alt=""/><br/><br/><strong><span style="color:red">build 090506</span></strong><br/><span style="color:Blue">紧急修正一个严重错误。</span><br/><br/><strong><span style="color:red">build 090824</span></strong><br/><span style="color:Blue">1. 修正多处语法高亮显示算法，能更好的以多种颜色显示代码。<br/>2. 修正多处自动完成代码语法分析算法，更有效率，尽可能少的影响代码录入的速度。<br/>3. 分析了 ISPP 预处理代码的语法分析，在视图中显示出来。(暂时还不能在预处理代码中实现代码自动完成功能)<br/>4. procedure 可分列 External 类声明。<br/>5. 同步更新至 5.3.4 代码。</span><br/><br/><strong><span style="color:red">build 091007</span></strong><br/><span style="color:Blue">1. 修正多处语法高亮显示算法。<br/>2. 修正 ISPP 分析算法。<br/>Unicode 版本更新：<br/>同步所有 ANSI 版本的功能，但是由于自动换行会影响程序打开速度，所以禁止了默认使用自动换行，但是换行功能仍然保留。</span><br/><br/><strong><span style="color:red">build 091103</span></strong><br/><span style="color:Blue">1.增加断开调试器的功能。<br/>2.工具菜单下增加插入颜色功能，同时为颜色对话框提供颜色拾取功能。<br/><img src="http://restools.hanzify.org/attachments/month_0911/y2009114224046.gif" border="0" alt=""/><br/>3.工具菜单下增加所有内部支持事件的定位功能。<br/>4.增加当前标识符的高亮显示。<br/><img src="http://restools.hanzify.org/attachments/month_0911/1200911422416.gif" border="0" alt=""/><br/>5.修正多处语法高亮显示的问题。<br/>6.增加直接打开生成安装程序所在目录的功能。</span><br/><br/><strong><span style="color:red">build 091128</span></strong><br/><span style="color:Blue">1. 修正多处语法高亮显示算法。<br/>2. 编辑器文字显示针对非等宽但视觉上同样等宽的字体（例如：宋体，新宋体等等）提供紧凑显示模式。</span><br/><img src="http://restools.hanzify.org/attachments/month_0911/p20091128221144.GIF" border="0" alt=""/><br/><br/><strong><span style="color:red">build 100102</span></strong><br/><span style="color:Blue">1. 修正了多处语法高亮问题。<br/>2. 增加了 WizardForm 的可视化设计功能，我可以大胆的说一句，目前没有任何的安装程序制作工具能够有<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>那样大的界面设计自由度。<br/>3. 查找替换框增加了“从脚本起始处开始”的选项。</span><br/><img src="http://restools.hanzify.org/attachments/month_1001/n20101214157.gif" border="0" alt=""/><br/><br/><strong><span style="color:red">build 100121</span></strong><br/><span style="color:Blue">同步到 5.3.7 版本，并添加支持多个属于增强版本的控件的可视化设计，未来将会完善更多控件和属性的可视化设计。</span><br/><br/><strong><span style="color:red">build 100212</span></strong><br/><span style="color:Blue">1. 支持 Interface 结构的解释，具体可查看<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>例子中的 CodeAutomation2.iss 脚本。<br/>2. 其他大量的可视化设计功能中的修正，这里就不一一细述了。</span><br/><img src="http://restools.hanzify.org/attachments/month_1002/82010212172353.gif" border="0" alt=""/><br/><br/><strong><span style="color:red">build 100221</span></strong><br/><span style="color:Blue">1. 同步至 5.3.8。<br/>2. WizardForm Designer 中支持 TRichEditViewer.RTFText 属性的可视化编辑。</span><br/><img src="http://restools.hanzify.org/attachments/month_1002/c2010221195524.GIF" border="0" alt=""/><br/><br/><strong><span style="color:red">build 100322</span></strong><br/><span style="color:Blue">1. 添加多语言界面支持。<br/>2. 为 WizardForm Designer 改善多处功能。</span><br/><img src="http://restools.hanzify.org/attachments/month_1003/f201032222453.gif" border="0" alt=""/><br/><br/><strong><span style="color:red">build 100608</span></strong><br/><span style="color:Blue">同步至 5.3.9 版本。并进行一些功能上的修正。</span><br/><br/><strong><span style="color:red">build 100707</span></strong><br/><span style="color:Blue">同步至 5.3.10 版本。并进行一些功能上的修正。</span><br/><br/><strong><span style="color:red">build 101205</span></strong><br/><span style="color:Blue">同步至 5.4.0 版本。并进行一些功能上的修正。</span><br/><img src="http://restools.hanzify.org/attachments/month_1012/q2010125224242.GIF" border="0" alt=""/><br/><br/><strong><span style="color:red">build 101211</span></strong><br/><span style="color:Blue">增加 Bitmap 和 Icon 的可视化处理。并修正一个影响 Unicode 版本可视化编辑的问题。</span><br/><img src="http://restools.hanzify.org/attachments/month_1012/g2010121121751.GIF" border="0" alt=""/><br/><br/><strong><span style="color:red">build 101226</span></strong><br/><span style="color:Blue">增加 控件事件 的可视化处理。并把原版的例子 CodeClasses.iss 修改成可视化版本，在这个例子中，你可以充分体验到可视化编辑带来的方便易用性，可以随意修改界面上控件的位置属性，而且非常方便的定位到相关控件的事件中。</span><br/><img src="http://restools.hanzify.org/attachments/month_1012/e201012261418.GIF" border="0" alt=""/><br/><br/><strong><span style="color:red">build 110102</span></strong><br/><span style="color:Blue">修正多处可视化设计中的 BUG。</span><br/><br/><strong><span style="color:red">build 110103</span></strong><br/><span style="color:Blue">1.继续修正多处可视化设计中的 BUG。<br/>2.增加扩展控件 TTimer 的可视化设计。<br/>3.增加非可视化控件的创建顺序的调整。</span><br/><br/><strong><span style="color:red">build 110116</span></strong><br/><span style="color:Blue">1.增加扩展控件 TImageList 的可视化设计。<br/>2.修正并调整语法高亮中的一些问题。并增加 Code 段语法高亮中的字符串内显示{#XXX}的特殊颜色。<br/>3.修正复制 UBB 和 HTML 代码时自动检测是否只复制 Code 段代码以便采用 Pas 高亮颜色处理。<br/>4.修正在可视化处理时，某些时候会出现令到可视化设计界面部分消失的情况。<br/>5.修正一处小的内存泄漏。<br/>6.修正一处自动完成列表弹出功能中的BUG。</span><br/><br/><strong><span style="color:red">build 110123</span></strong><br/><span style="color:Blue">1.修正一处自动完成列表算法中的问题。<br/>2.修正一些可视化设计中的问题。<br/>3.增加控件 TNewNotebook 的可视化设计。</span><br/><br/><strong><span style="color:red">build 110202</span></strong><br/><span style="color:Blue">1.对于原 WizardForm 控件提供了改变父控件的方法。<br/>2.修正一些可视化设计中的问题。</span><br/><img src="http://restools.hanzify.org/attachments/month_1102/k20112223631.GIF" border="0" alt=""/><br/><br/><strong><span style="color:red">build 110208</span></strong><br/><span style="color:Blue">1.修正脚本向导中的一个错误。<br/>2.可视化设计中修正“更改父控件”中的一个错误。<br/>3.可视化设计中增加控件的锁定功能，防止控件被不小心的移位。<br/>4.增加“TNewSpeedButton”的可视化设计。<br/>5.修正可视化设计中部分控件的 OnMouseEnter 和 OnMouseLeave 的事件显示。</span><br/><br/><strong><span style="color:red">build 110209</span></strong><br/><span style="color:Blue">1.修正可视化设计中的一些错误。<br/>2.可视化设计中添加缩放功能。<br/>3.在 Unicode 版本中，脚本可以强制保存为 UTF-8 编码格式。 </span><br/><br/><strong><span style="color:red">build 110213</span></strong><br/><span style="color:Blue">同步至 5.4.1 版本，由于编辑器修改的程度已经日渐增大，以 Compil32Ex.exe 的名字出现， 复制到原版中使用，不再以覆盖的方式使用，所以请用户自行选择编辑器使用。</span><br/><br/><strong><span style="color:red">build 110301</span></strong><br/><span style="color:Blue">修正多处可视化编辑中的问题。</span><br/><br/><strong><span style="color:red">build 110319</span></strong><br/><span style="color:Blue">同步至 5.4.2, 并进行一些小的修正。</span><br/><br/><strong><span style="color:red">build 120112</span></strong><br/><span style="color:Blue">同步至 5.4.3, 并进行一些小的错误修正和显示上的改善。</span><br/><br/><span style="color:Red">下载地址：</span><br/>适用于 <strong><span style="color:Blue">5.1.5</span></strong> 版本 功能扩展到 build 051002<br/><span style="font-size:11pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/InnoCompiler051002.zip">http://restools.hanzify.org/inno/InnoCompiler051002.zip</a></strong></span><br/><br/>适用于 <strong><span style="color:Blue">5.2.3</span></strong> 版本 功能扩展到 build 090506<br/><span style="font-size:11pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/InnoCompiler090506.zip">http://restools.hanzify.org/inno/InnoCompiler090506.zip</a></strong></span><br/><span style="color:Red"><strong>For English:</strong></span><br/><span style="font-size:11pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/InnoCompiler090506_English.zip">http://restools.hanzify.org/inno/InnoCompiler090506_English.zip</a></strong></span><br/><br/>适用于 <strong><span style="color:Blue">5.2.4 - 5.4.0</span></strong> 版本 功能扩展到 build 110209 <br/><span style="color:Red"><strong>Multilanguage support: English, Chinese</strong></span><br/><span style="font-size:11pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/InnoCompiler110209(7zip).zip">http://restools.hanzify.org/inno/InnoCompiler110209(7zip).zip</a></strong></span><br/><br/>适用于 <strong><span style="color:Blue">5.4.1 - 5.4.3</span></strong> 版本 功能扩展到 build 120112 <br/><span style="color:Red"><strong>Multilanguage support: English, Chinese</strong></span><br/><span style="font-size:11pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/InnoCompiler120112(7zip).zip">http://restools.hanzify.org/inno/InnoCompiler120112(7zip).zip</a></strong></span>]]></summary>
	  <link rel="alternate" type="text/html" href="http://restools.hanzify.org/default.asp?id=47" /> 
	  <id>http://restools.hanzify.org/default.asp?id=47</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Inno Setup 编译器&amp;主体程序增强版(build 111225)]]></title>
	  <author>
		 <name>xin</name>
		 <uri>http://restools.hanzify.org/</uri>
		 <email>restools@21cn.com</email>
	  </author>
	  <category term="" scheme="http://restools.hanzify.org/default.asp?cateID=4" label="NSIS &amp; InnoSetup" /> 
	  <updated>2011-12-25T19:57:15+08:00</updated>
	  <published>2011-12-25T19:57:15+08:00</published>
		  <summary type="html"><![CDATA[把<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>中的编译器 (ISCmplr.dll) 和主体程序 (setup.e32) 进行了部分修改，使它更加完善，比<a href="http://nsis.sourceforge.net" target="_blank"> NSIS </a>使用更简单，更完美。 :) <br/><strong>附图：</strong><br/><img src="http://restools.hanzify.org/attachments/month_0808/snapa.gif" border="0" alt=""/><br/><br/>因为安装主体程序[Setup.e32]涉及安装程序大小，所以将会在每个更新版本中标明 [Setup.e32] 的大小，以方便各位能方便判断是否有必要使用增强版，正常来说，如果没有使用到增强版的功能，建议使用原版安装主体程序[Setup.e32]，因为每增加一项功能文件大小都会有所增长。<br/><br/>增强版没有作汉化处理，原本打算汉化的，因为对于中文的 Unicode 来说，比起英文的要短，如果作汉化，会为安装主体程序[Setup.e32]节省大概 6~8 KB 大小，不过为了能很好的在任何系统中运行多语言安装程序(汉化的也能运行，只不过提示信息在非中文语系的系统中会出现提示信息乱码)，所以未作汉化。<br/><br/><span style="color:Blue">原版安装主体程序[Setup.e32, ver: 5.2.3]文件大小:</span> <span style="color:Red">669 KB</span><br/>制作成安装程序后会经过压缩算法压缩该文件的大小。压缩会减少超过一半大小。<br/><br/>和之前编译编辑器增强版不同，编译编辑器无关安装程序大小，所以我并不关心它的大小，但是该安装主体程序关系到安装程序大小，有时候会因为不同的功能和不同的大小而去选择某一个 build 版本，所以为了方便你选择任何一个 build 版本，我尽可能的保留任何一个 build 版本，除非那个版本存在错误将不会保留，如果最新版本比之前的版本要小，那么之前所有版本也将不会被保留。<br/><br/><strong><span style="color:red">build 080805</span></strong> <br/><span style="color:Blue">1. Components 组件列表控件被修改为 TreeView 模式，并修正里面几个显示问题(包括原作 者发现并部分修正的问题 - 在 2000/XP/2003 环境下，鼠标滚动和垂直滚动条翻页都会造成一个错误的视觉效果，就是列表向相反方向滚动，而作者只修正鼠标滚动的效果，滚动条翻页根据作者注释，因为不太明显，所以未修正，而且原作者采用模拟的方法来修正，跟系统效果并非完全一样，尤其是在滚动时的显示速度上，所以我重新修改了修正方法解决所有滚动视觉效果问题，关于这个解决的效果各位可以做测试对比一下就知道)，虽然组件列表被修改为 TreeView 模式，但是仍然支持原来的显示模式，TreeView 模式只作为一个安装选项来激活，具体使用方法参阅脚本例子。<br/>2. 增加内部支持函数( function GetPassword: String; )如发现脚本存在该函数，同时该函数提供的密码是正确的时候，会自动跳过 Password 输入页面，同时该函数优先于所有释放文件函数，所以无须为初始安装时释放的文件打上 noencryption 标记。具体使用方法请参考附带的脚本例子。需要加密模块 ISCrypt.dll 支持。</span><br/><img src="http://restools.hanzify.org/attachments/month_0808/3200885213627.jpg" border="0" alt=""/><br/>① 点击按钮会“折叠”或者“展开”项。<br/>② 点击文字区域会激活高亮该项，但是并不进行“Check”或者“UnCheck”的操作。<br/>&nbsp;&nbsp; 同时，双击该区域也会执行“折叠”或者“展开”的操作。<br/>③ 点击此区域可以进行“Check”或者“UnCheck”的操作。<br/>④ 此为最顶层的项的连线，可由控件属性“Showroot”控制是否显示该区域。<br/>⑤ 当使用“Showroot”隐藏了 ④ 区域时，只能双击该项才能“展开”或者“折叠”子项。<br/><br/><strong><span style="color:red">build 080815</span></strong> <br/><span style="color:Blue">1. property ItemHeightFixed: Boolean; read write;<br/>&nbsp;&nbsp; 该项设置为 True，以单行高显示每项，显示不完全的可以以 Hint 显示完整一行。<br/>2. TItemArea = (iaOther, iaButton, iaCheckmark, iaItem, iaSubItem);<br/>&nbsp;&nbsp; TItemMouseMoveEvent = procedure(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);<br/>&nbsp;&nbsp; property OnItemMouseMove: TItemMouseMoveEvent; read write;<br/>&nbsp;&nbsp; 增加一个在 Item 上移动鼠标的事件。<br/>3. property AbsItemIndex: Integer; read;<br/>&nbsp;&nbsp; 当前项绝对索引 AbsItemIndex。<br/>4. 在不等高情况下，仍然维持原作者的滚动视觉解决方法。<br/>上面的选项的具体使用在例子中已经详细解释，这里就不做更详细的解释了。</span><br/><br/><strong><span style="color:red">build 080816</span></strong> <br/><span style="color:Blue">1. 指定项是展开还是收缩子项<br/>&nbsp;&nbsp;&nbsp;&nbsp; property ItemExpanded[Index]: Boolean; read write;<br/>2. 是否在没有焦点的情况下仍然显示被选择的项<br/>&nbsp;&nbsp;&nbsp;&nbsp; property HideSel&#101;ction: Boolean; read write;<br/>使用方法看例子。</span><br/><strong>附图：</strong><br/><img src="http://restools.hanzify.org/attachments/month_0808/snap.gif" border="0" alt=""/><br/><br/><strong><span style="color:red">build 080914</span></strong><br/><span style="color:Blue">修正原版就有的错误，尤其是部分帮助中提及的类的支持，改善显示，主要是 CheckListbox 的显示。</span><br/><br/><strong><span style="color:red">build 081121</span></strong> <br/><span style="color:Blue">TNewCheckListBox 增加 2 个属性。<br/>&nbsp;&nbsp;&nbsp;&nbsp; property ItemFontStyle[Index: Integer]: TFontStyles; read write;<br/>&nbsp;&nbsp;&nbsp;&nbsp; property SubItemFontStyle[Index: Integer]: TFontStyles; read write;</span><br/><img src="http://restools.hanzify.org/attachments/month_0811/o2008112115031.gif" border="0" alt=""/><br/><br/><strong><span style="color:red">build 081207</span></strong><br/><span style="color:Blue">1. 修改 GetPassword 定义。<br/>2. 增加 1 个密码设置函数 SetPassword，具体使用方法可以参考例子。<br/>&nbsp;&nbsp;&nbsp;&nbsp; procedure SetPassword(const Password: String);</span><br/><br/><strong><span style="color:red">build 090222</span></strong> <br/><span style="color:Blue">增加 FullVCL 版本的编译器。此为全属性编译版本。拥有更多的事件触发，例如：OnMouseDown，OnMouseUp，OnMouseMove 等等，并拥有更多的 VCL 控件使用。例如：TTimer, Application, TMenu 等等。</span><br/><br/><strong><span style="color:red">build 090225</span></strong> <br/><span style="color:Blue">增加 TScreen 组件。<br/>增加 Application.OnMessage 事件。<br/>增加 procedure Randomize; 函数。<br/>增加了几个有趣的例子。</span><br/><br/><strong><span style="color:red">build 090302</span></strong> <br/>FullVCL: <br/><span style="color:Blue">FullVCL 版本更新:<br/>增加 TImageList, TIcon, TTreeView, TListView 组件。</span><br/><br/><strong><span style="color:red">build 090424</span></strong> <br/><span style="color:Blue">1. 修正 Delphi 2.0 编译的程序的 Hint 显示效果，修正为传统的 Windows 样式。<br/>2. 修正 Delphi 2.0 编译的安装程序在最小化时的动态缩小效果显示问题。<br/>3. 增加 TNewCheckListBox.LoadBtnBmpFromFile 方法，可自定义 RadioButtn 和 CheckBox 的按钮图片，同时在 [Setup] 段添加选项 ComponentsListBtnImageFile，功能跟前面说的一样，就是载入自定义按钮图片。<br/>4. 增加 TFolderTreeView.ShowAllFolders 属性，可显示所有文件夹(包括系统隐藏属性)<br/>5. 修正<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>在 PrivilegesRequired=admin 时(这是默认选项，可不用明确设置)&nbsp;&nbsp;会同时设置安装程序的 Manifest 中的 requestedExecutionLevel level=requireAdministrator 以适应 Vista 中在非管理员状态下运行安装程序自动提示输入管理员密码。</span><br/><span style="color:Blue">FullVCL 版本更新:<br/>1.&nbsp;&nbsp;同步所有 MiniVCL 更新。<br/>2.&nbsp;&nbsp;删除对 TGroupBox 的支持，因为它在 Delphi 2.0 中编译不支持 XP 主题，重新创建一个支持 XP 主题的组件 TNewGroupBox。<br/>3.&nbsp;&nbsp;删除对 TRadioGroup 的支持，因为可以用 TNewGroupBox 和 TNewRadioButton 来组成。<br/>4.&nbsp;&nbsp;删除对 TNotebook 的支持，因为已经有 TNewNotebook 可以使用。<br/>5.&nbsp;&nbsp;删除对 THeader 的支持，因为它不支持 XP 主题，增加组件 THeaderControl (支持XP主题)。<br/>6.&nbsp;&nbsp;修正 Delphi 2.0 编译的 TTreeView 和 TListView 在 XP 主题下的边框显示问题。<br/>7.&nbsp;&nbsp;删除对 TImage 的支持，增加 TNewIcon, TNewIconImage 组件，类似 TBitmapImage，可以载入 Icon，并且支持真彩图标。<br/>8.&nbsp;&nbsp;修正 TForm 和 TApplication 组件的 Icon 属性。<br/>9.&nbsp;&nbsp;添加 TTrackBar, TUpDown, THotKey, TTabControl, TPageControl 组件。<br/>10. 修正所有组件的 PopupMenu 属性。<br/>11. 修正几个 菜单函数。<br/>又增加了几个有趣的例子，希望喜欢<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>的朋友会更加的喜欢这个安装制作程序。</span><br/><img src="http://restools.hanzify.org/attachments/month_0904/p2009424211032.GIF" border="0" alt=""/><br/><br/><strong><span style="color:red">build 090926</span></strong> (5.3.5.e1 &amp; 5.3.5.ee1)<br/><span style="color:Blue">同步至 InnoSetup 5.3.5 代码，ISPP 同步至 5.3.5 代码。<br/>MiniVCL 版本更新:<br/>1. 修正 CheckListBox 的 Showroot 时画虚线的小小失误。<br/>2. 修正 TRichEditViewer 在主题模式下的边框显示问题。<br/>3. 增加一个函数 CallbackAddr，直接支持脚本使用回调函数。<br/>4. TNewCheckbox 之前增强的 AddCheckBox，AddGroup，AddRadioButton 函数将会还原成<br/>&nbsp;&nbsp; 原来的样子，增强的功能被分拆为 AddCheckBoxEx，AddGroupEx，AddRadioButtonEx，<br/>&nbsp;&nbsp; 以保证和原版<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>脚本的兼容性。<br/>FullVCL 版本更新:<br/>同步 MiniVCL 的修改。<br/>1. 修正 TForm.Menu 属性。<br/>Unicode 版本:<br/>同步 ANSI 版本的更新。扩展一些类的属性。具体看例子和 Support Classes.txt。<br/>ISPP 版本更新:<br/>1. 增加增强版的内部标志 #define IS_ENHANCED<br/>2. 增加两个内部变量：<br/>&nbsp;&nbsp;IS_Ver_Str: String; // 返回<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>编译器的版本字符串。<br/>&nbsp;&nbsp;ISPP_Ver_Str: String; // 返回 ISPP 的版本字符串。</span><br/><br/><strong><span style="color:red">build 091123</span></strong> (5.3.6.e1 &amp; 5.3.6.ee1)<br/><span style="color:Blue">同步至 5.3.6 版本。<br/>MiniVCL 版本更新:<br/>增加以下 2 个函数，最大的特点是可以换图标和能倒计时。<br/>function MsgBoxEx(AWnd: HWND; AText, ACaption: string; AType, AIcon: UINT; ATimeOut: Integer): Integer;<br/>function InputBoxEx(AWnd: HWND; AText, ACaption, ADefaut, APasswordChar: string; AIcon: UINT; AWidth, AHeight, ATimeOut: Integer; var AResultStr: String): Boolean;<br/>FullVCL 版本更新:<br/>同步 MiniVCL 更新,<br/>增加 TNewMonthCalendar 和 TNewDateTimePicker 两个日期时间控件,并增加以下函数:<br/>function Date: TDateTime;<br/>function DateTimeToStr(DateTime: TDateTime): String;<br/>procedure DateTimeToString(var Result: String; const Format: String; DateTime: TDateTime);<br/>function DateToStr(Date: TDateTime): String;<br/>function DayOfWeek(Date: TDateTime): Integer;<br/>procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word);<br/>procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word);<br/>function EncodeDate(Year, Month, Day: Word): TDateTime;<br/>function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;<br/>function FormatDateTime(const Format: String; DateTime: TDateTime): String;<br/>function Now: TDateTime;<br/>function StrToDate(const S: String): TDateTime;<br/>function StrToDateTime(const S: String): TDateTime;<br/>function StrToTime(const S: String): TDateTime;<br/>function Time: TDateTime;<br/>function TimeToStr(Time: TDateTime): String;<br/>其他还有一些小的修正。</span><br/><br/><strong><span style="color:red">build 100108</span></strong> (5.3.7.e1 &amp; 5.3.7.ee1)<br/><span style="color:Blue">同步至 5.3.7 版本。<br/>MiniVCL 版本更新:<br/>&nbsp;&nbsp;ANSI版本修正调试状态下的提示会导致被调试程序退出，这个原版就有问题的。<br/>FullVCL 版本更新:<br/>&nbsp;&nbsp;同步 MiniVCL 更新,<br/>&nbsp;&nbsp;增加 TIPAddressEdit 控件。</span><br/><br/><strong><span style="color:red">build 100210</span></strong> (5.3.7.e2 &amp; 5.3.7.ee2)<br/><span style="color:Blue">MiniVCL 版本更新:<br/>&nbsp;&nbsp;TNewCheckbox, TNewRadioButton 增加 ParentBackground 属性。<br/>FullVCL 版本更新:<br/>&nbsp;&nbsp;同步 MiniVCL 更新,<br/>&nbsp;&nbsp;TNewGroupBox 增加 ParentBackground 属性，THotkey 增加 Color、ParentColor、Font、ParentFont 属性。<br/>&nbsp;&nbsp;增加 TStatusbar 控件。<br/>&nbsp;&nbsp;Unicode 版本中 TNewStaticText 增加 Transparent 属性。<br/>&nbsp;&nbsp;Unicode 版本中恢复对 Interface 的支持，具体可测试编译<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>例子中的 CodeAutomation2.iss 例子。</span><br/><br/><strong><span style="color:red">build 100224</span></strong> (5.3.8.e1 &amp; 5.3.8.ee1)<br/><span style="color:Blue">&nbsp;&nbsp;同步至 5.3.8 版本。<br/>&nbsp;&nbsp;修正 TNewCheckListbox 中的一个问题。<br/>&nbsp;&nbsp;增加函数 procedure ExtractTemporaryFileEx(const FileName: String; const DestDir: String);</span><br/><br/><strong><span style="color:red">build 100301</span></strong> (5.3.8.e2 &amp; 5.3.8.ee2)<br/><span style="color:Blue">修正属性 TNewCheckbox.ParentBackground, TNewRadioButton.ParentBackground, TNewGroupBox.ParentBackground 的处理方法。 <br/>&nbsp;&nbsp;修正函数 CallbackAddr 在某些 Windows 平台(例如: Windows XP SP3)出现不能正常运行的问题。<br/>&nbsp;&nbsp;&nbsp;&nbsp;具体使用方法可参考例子：Example_Callback_1.iss 和 Example_Callback_2.iss</span><br/><br/><strong><span style="color:red">build 100323</span></strong> (5.3.8.e3 &amp; 5.3.8.ee3)<br/><span style="color:Blue">这次主要是针对 Unicode 版本的修正：<br/>1. 修正 PAnsiChar 类型的声明。<br/>2. 修正在 Win2000 系统下(不带 SP)不能正常运行的问题，在 CVS 上这个修正是属于下一版本的，因为这个比较重要，所以我提前在 5.3.8 里面应用它了。</span><br/><br/><strong><span style="color:red">build 100418</span></strong> (5.3.9.e1 &amp; 5.3.9.ee1)<br/><span style="color:Blue">&nbsp;&nbsp;同步至 5.3.9 版本。</span><br/><br/><strong><span style="color:red">build 100613</span></strong> (5.3.10.e1 &amp; 5.3.10.ee1)<br/><span style="color:Blue">ANSI 版本：<br/>&nbsp;&nbsp;同步至 5.3.10 版本。</span><br/><br/><strong><span style="color:red">build 100625</span></strong> (5.3.10.e2 &amp; 5.3.10.ee2)<br/><span style="color:Blue">&nbsp;&nbsp;1. 为配合 ISSkin 的应用, TRichEditViewer 增加属性 ThemeBorder , 默认被设为 True, 当它为 False 时, 控件边框可以被 ISSkin 应用主题.<br/>&nbsp;&nbsp;2. TBitmapImage 的修改, 当 BackColor 和 ReplaceWithColor 的颜色都为 clNone 的时候, 将会以 ReplaceColor 作为图片的透明色使用. TNewIconImage 的修改, 当 BackColor 的颜色为 clNone 的时候, 背景将会是透明的. 具体可查看例子 Example_TransparentBmp.iss</span><br/><br/><strong><span style="color:red">build 100918</span></strong> (5.3.11.e1 &amp; 5.3.11.ee1)<br/><span style="color:Blue">　1. 同步至 5.3.11 版本。<br/>　2. MiniVCL 版本增加类: TMemoryStream 和 TResourceStream 。<br/>　3. 增加函数 ExtractTemporaryFileToStream, 可把临时文件释放到内存中使用。具体可查看例子 Example_ExtractTemporaryFileToStream.iss<br/>　4. 其他一些修正。</span><br/><br/><strong><span style="color:red">build 101107</span></strong> (5.4.0.e1 &amp; 5.4.0.ee1)<br/><span style="color:Blue">&nbsp;&nbsp;1. 同步至 5.4.0 版本。<br/>&nbsp;&nbsp;2. 增加函数 ExtractTemporaryFileToBuffer, 可把临时文件释放到内存中使用。具体可查看例子 Example_ExtractTemporaryFileToBuffer.iss<br/>&nbsp;&nbsp;3. Unicode 版本增加函数 CastAnsiStringToInteger 和 CastIntegerToAnsiString，配合 ExtractTemporaryFileToBuffer 函数使用。</span><br/><br/><strong><span style="color:red">build 101129</span></strong> (5.4.0.e2 &amp; 5.4.0.ee2)<br/><span style="color:Blue">&nbsp;&nbsp;1. 增加运行时常量 {apphwnd}, 相当于 Application.handle, 方便特殊场合使用, 具体可参考例子 Example_{apphwnd}.iss。<br/>&nbsp;&nbsp;2. 为解决卸载界面的自定义, 经过再三思量, 想出了在安装部分提供一个函数 PerformPreviousUninstall, 这是一个能在安装程序中调用的卸载函数, 它会自动检测之前安装的程序, 并且根据卸载的数据文件进行卸载的函数。为配合此函数, 同时提供 2 个函数 GetSetupPreviousData 和 SetSetupPreviousData, 类似于 GetPreviousData 和 SetPreviousData, 但是前 2 个函数的层级更高, 可以访问前安装程序的卸载注册表信息(例如 UninstallString, InstallLocation 等等), 可以参阅 2 个例子: Example_Uninstall_1.iss 和 Example_Uninstall_2.iss。 这两个例子充分体现了 PerformPreviousUninstall 在用户可定制方面的自由度, 我只是把它们做得尽量简单, 其实它完全可以扩充为更为复杂的定制安装卸载功能。</span><br/><br/><strong><span style="color:red">build 110111</span></strong> (5.4.0.e3 &amp; 5.4.0.ee3)<br/><span style="color:Blue">&nbsp;&nbsp;1. ExtractTemporaryFile, ExtractTemporaryFileEx, ExtractTemporaryFileToStream, ExtractTemporaryFileToBuffer 这 4 个函数都支持文件序号方式的释出文件。<br/>&nbsp;&nbsp;&nbsp;&nbsp; 例如使用了相同目标文件名字的文件可以按照脚本顺序位置使用诸如：<br/>&nbsp;&nbsp;&nbsp;&nbsp; ExtractTemporaryFile(&#39;logo.bmp:1&#39;) 这样的方式来释出，具体可参阅例子 Example_ExtractTemporaryFile.iss 。<br/>&nbsp;&nbsp;2. MiniVCL 版本的 TBitmap 增加以下函数:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procedure LoadFromResourceName(Instance: THandle; const ResName: String);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procedure LoadFromResourceID(Instance: THandle; ResID: Integer);<br/>&nbsp;&nbsp;3. FullVCL 版本的 TNewIcon 增加以下函数:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procedure LoadFromResourceName(Instance: THandle; const ResName: String);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procedure LoadFromResourceID(Instance: THandle; ResID: Integer);<br/>&nbsp;&nbsp;4. MiniVCL 版本的 TStrings 增加以下函数:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procedure LoadFromStream(Stream: TStream);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procedure SaveToStream(Stream: TStream);<br/>&nbsp;&nbsp;5. MiniVCL 版本的 TForm 增加属性<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; property ModalResult: Longint; read write;<br/>&nbsp;&nbsp;6. Setup 段增加参数 BitmapResource, IconResource, RawDataResource , 这 3 个属性主要是在安装程序中添加资源文件, 这样变相也为卸载程序提供了有效的图像来源和各种文件来源的可能行, 同时也维持了一贯的程序的单文件性。具体可以参阅 Example_BitmapResource.iss， Example_IconResource_1.iss，&nbsp;&nbsp;Example_IconResource_2.iss， Example_RawDataResource.iss<br/>&nbsp;&nbsp;7. 重开已被官方废弃的 Setup 参数 UninstallIconFile, 因为已经找到不影响 Win9x 下运行的解决方案。具体可参阅 Example_UninstallIconFile.iss</span><br/>&nbsp;&nbsp;额外的做了一个模仿 UninsHs 的例子，集中体现了以上增强功能的效果: Example_Uninstall_3.iss。<br/><img src="http://restools.hanzify.org/attachments/month_1101/1201111123384.GIF" border="0" alt=""/><br/><br/><strong><span style="color:red">build 110206</span></strong> (5.4.0.e4 &amp; 5.4.0.ee4)<br/><span style="color:Blue">MiniVCL 版本：<br/>&nbsp;&nbsp;TLabel, TNewStaticText, TBitmapImage 增加事件: <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; property OnMouseEnter: TNotifyEvent; read write;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; property OnMouseLeave: TNotifyEvent; read write;<br/>&nbsp;&nbsp;&nbsp;&nbsp; 这两个事件的用处可以参考例子: Example_MouseEvent_ImgBtn.iss 和 Example_MouseEvent_URLLabel.iss<br/>&nbsp;&nbsp;TButton 增加 procedure Click;<br/>FullVCL 版本:<br/>&nbsp;&nbsp;除了同步 MiniVCL 版本的更新外, 很多其他控件都增加了事件, 例如 TEdit, TButton 都有这2个事件.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; property OnMouseEnter: TNotifyEvent; read write;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; property OnMouseLeave: TNotifyEvent; read write;<br/>&nbsp;&nbsp;具体可参考例子: Example_MouseEvent_HotEdit.iss<br/>&nbsp;&nbsp;另外还增加了新的控件 TNewSpeedButton, 例子有: Example_TNewSpeedButton_1.iss 和 Example_TNewSpeedButton_2.iss</span><br/><img src="http://restools.hanzify.org/attachments/month_1102/420112623325.GIF" border="0" alt=""/><br/><br/><strong><span style="color:red">build 110214</span></strong> (5.4.1.e1 &amp; 5.4.1.ee1)<br/><span style="color:Blue">&nbsp;&nbsp;同步至 5.4.1 版本。另外修正控件 TNewSpeedButton 的一些问题。<br/>&nbsp;&nbsp;由于 ISPP 的版本号已经取消，所以 ISPP_Ver_Str 常量也被取消。</span><br/><br/><strong><span style="color:red">build 110220</span></strong> (5.4.1.e2 &amp; 5.4.1.ee2)<br/><span style="color:Blue">&nbsp;&nbsp;1.修正控件 TNewSpeedButton 的一些问题。<br/>&nbsp;&nbsp;2.由于函数 Format 对于 Float 的局限性，所以增加了 FormatFloat 函数。将会更加方<br/>&nbsp;&nbsp;&nbsp;&nbsp;便地对 Float 类型数据进行格式化，具体参考 Example_FormatFloat.iss。<br/>&nbsp;&nbsp;3.TNewCheckListbox 增加以下函数:<br/>&nbsp;&nbsp;&nbsp;&nbsp; procedure LoadBGBmpFromBitmap(Bmp: TBitmap; OffsetX, OffsetY: Integer);<br/>&nbsp;&nbsp;&nbsp;&nbsp; procedure LoadBGBmpFromFile(FileName: String; OffsetX, OffsetY: Integer);<br/>&nbsp;&nbsp;&nbsp;&nbsp;可以添加背景图片，这样就可以统一整个安装程序界面的背景，就像下图一样（参考 Example_NewCheckListBox.iss）<br/>&nbsp;&nbsp;4.MinVCL 版本为 TStrings 增加以下函数:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure BeginUp&#100;ate;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure EndUp&#100;ate;</span><br/><img src="http://restools.hanzify.org/attachments/month_1102/02011220175436.png" border="0" alt=""/><br/><br/><strong><span style="color:red">build 110326</span></strong> (5.4.2.e1 &amp; 5.4.2.ee1)<br/><span style="color:Blue">&nbsp;&nbsp;同步至 5.4.2 版本。</span><br/><br/><strong><span style="color:red">build 110329</span></strong> (5.4.2.e2 &amp; 5.4.2.ee2)<br/><span style="color:Blue">&nbsp;&nbsp;修正一个语言问题, 添加一个<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>事件:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function InitializeLanguageDialog(Languages: String; var LanguageIndex: Integer): Boolean;<br/>&nbsp;&nbsp;它是一个比 语言对话框 更早出现的<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>事件。<br/>&nbsp;&nbsp;Languages 是语言对话框会出现的语言列表, LanguageIndex 是将会选定的语言, 在事件中可以重新指定. Result 如果为 False, 语言对话框将不会出现.<br/>&nbsp;&nbsp; 而 [Setup] 参数 ShowLanguageDialog 仍然优先于这个事件, 如果 ShowLanguageDialog 被设置为 no , InitializeLanguageDialog 将不会被执行.</span><br/><br/><strong><span style="color:red">build 111225</span></strong> (5.4.3.e1 &amp; 5.4.3.ee1)<br/><span style="color:Blue">ANSI 版本：<br/>(MiniVCL: Setup.e32 文件大小: 725 KB)<br/>(FullVCL: Setup.e32 文件大小: 894 KB)<br/>Unicode 版本：<br/>(MiniVCL: Setup.e32 文件大小: 1165 KB)<br/>(FullVCL: Setup.e32 文件大小: 1451 KB)<br/>&nbsp;&nbsp; 同步至 5.4.3 版本。</span><br/><br/><span style="color:Red">下载地址：</span><br/>适用于 <span style="color:Blue"><strong>5.3.8</strong></span> 版本 功能扩展到 build 100323<br/><span style="font-size:12pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/Inno_ISCmplr_Setup100323(7zip).zip">http://restools.hanzify.org/inno/Inno_ISCmplr_Setup100323(7zip).zip</a></strong></span><br/><br/>适用于 <span style="color:Blue"><strong>5.3.9</strong></span> 版本 功能扩展到 build 100418<br/><span style="font-size:12pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/Inno_ISCmplr_Setup100418(7zip).zip">http://restools.hanzify.org/inno/Inno_ISCmplr_Setup100418(7zip).zip</a></strong></span><br/><br/>适用于 <span style="color:Blue"><strong>5.3.10</strong></span> 版本 功能扩展到 build 100625<br/><span style="font-size:12pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/Inno_ISCmplr_Setup100625(7zip).zip">http://restools.hanzify.org/inno/Inno_ISCmplr_Setup100625(7zip).zip</a></strong></span><br/><br/>适用于 <span style="color:Blue"><strong>5.3.11</strong></span> 版本 功能扩展到 build 100918<br/><span style="font-size:12pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/Inno_ISCmplr_Setup100918(7zip).zip">http://restools.hanzify.org/inno/Inno_ISCmplr_Setup100918(7zip).zip</a></strong></span><br/><br/>适用于 <span style="color:Blue"><strong>5.4.0</strong></span> 版本 功能扩展到 build 110206<br/><span style="font-size:12pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/Inno_ISCmplr_Setup110206(7zip).zip">http://restools.hanzify.org/inno/Inno_ISCmplr_Setup110206(7zip).zip</a></strong></span><br/><br/>适用于 <span style="color:Blue"><strong>5.4.1</strong></span> 版本 功能扩展到 build 110220<br/><span style="font-size:12pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/Inno_ISCmplr_Setup110220(7zip).zip">http://restools.hanzify.org/inno/Inno_ISCmplr_Setup110220(7zip).zip</a></strong></span><br/><br/>适用于 <span style="color:Blue"><strong>5.4.2</strong></span> 版本 功能扩展到 build 110329<br/><span style="font-size:12pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/Inno_ISCmplr_Setup110329(7zip).zip">http://restools.hanzify.org/inno/Inno_ISCmplr_Setup110329(7zip).zip</a></strong></span><br/><br/>适用于 <span style="color:Blue"><strong>5.4.3</strong></span> 版本 功能扩展到 build 111225<br/><span style="font-size:12pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/Inno_ISCmplr_Setup111225(7zip).zip">http://restools.hanzify.org/inno/Inno_ISCmplr_Setup111225(7zip).zip</a></strong></span>]]></summary>
	  <link rel="alternate" type="text/html" href="http://restools.hanzify.org/default.asp?id=89" /> 
	  <id>http://restools.hanzify.org/default.asp?id=89</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[本人承接各类 NSIS 和 InnoSetup 付费制作项目(11-28 更新nsUI例子)]]></title>
	  <author>
		 <name>xin</name>
		 <uri>http://restools.hanzify.org/</uri>
		 <email>restools@21cn.com</email>
	  </author>
	  <category term="" scheme="http://restools.hanzify.org/default.asp?cateID=4" label="NSIS &amp; InnoSetup" /> 
	  <updated>2011-11-28T20:10:53+08:00</updated>
	  <published>2011-11-28T20:10:53+08:00</published>
		  <summary type="html"><![CDATA[本人承接各类<a href="http://nsis.sourceforge.net" target="_blank"> NSIS </a>和<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>安装程序付费制作项目<br/>包括以下项目均在范围内:<br/>1. 插件编写： 很多情况下，一个安装程序并不可能包含方方面面的功能，这时就需要额外的编写一定功能的插件作为辅助。<br/>2. 插件改写： 例如<a href="http://nsis.sourceforge.net" target="_blank"> NSIS </a>的插件，<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>的插件，如果你有相关插件的源码，而认为功能不足，可进行相关的改写增强。<br/>3. 脚本编写： 主要以<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>为主，<a href="http://nsis.sourceforge.net" target="_blank"> NSIS </a>亦无不可，只是我编写<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>脚本的速度要快很多。<br/><br/>未来的安装程序必定会朝个性化的方向发展，你需要给客户一个更具亲和力的第一印象，那么安装程序就是你的第一步。<br/><br/>如何个性化？一个独树一帜的界面当然就是难以模仿的。就像以下附图和附件中的一个例子，以下只是展示了一个不规则安装程序窗口的样貌(像迅雷这样的安装程序仍然在标准之列，仍是中规中矩的)。当然，这同样需要一个好的美工，例如以下的界面，如何让一些闪光或光束在透明背景下仍然有发光的效果，而在客户的系统中，无论客户的系统背景是光亮还是黑暗都无损这个异形界面的发光效果。这就是关键所在。<br/><span style="color:Blue"><strong>附图：</strong></span><br/><img src="http://restools.hanzify.org/attachments/month_1010/0201010317526.JPG" border="0" alt=""/><br/><span style="color:Blue"><strong>附件：</strong></span>(只展现效果, 并无安装功能)<br/><span style="font-size:14pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/other/InnoDemo.rar">http://restools.hanzify.org/inno/other/InnoDemo.rar</a></strong></span><br/><br/>以下是迅雷7的安装例子, 这里只是展示一下界面效果.(它和原版迅雷的安装程序的最大差别就是, 以下这个例子即使在 Win9x 系统中仍然能正常运行)<br/><img src="http://restools.hanzify.org/attachments/month_1011/f2010112191721.GIF" border="0" alt=""/><br/><span style="color:Blue"><strong>附件：</strong></span><br/><span style="font-size:14pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/other/ThunderSetup.rar">http://restools.hanzify.org/inno/other/ThunderSetup.rar</a></strong></span><br/>3-21更新插件例子, 使用另一版本的 Delphi 编译.<br/>&nbsp;&nbsp;&nbsp;&nbsp;安装例子检查结果:<br/>&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://virscan.org/report/29c72ebaa8cc2c5bc91bb51cf77eda40.html" target="_blank">http://virscan.org/report/29c72ebaa8cc2c5bc91bb51cf77eda40.html</a><br/>&nbsp;&nbsp;&nbsp;&nbsp;插件检查结果:<br/>&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://virscan.org/report/dca380ed9381f48974b09c8f30e2148f.html" target="_blank">http://virscan.org/report/dca380ed9381f48974b09c8f30e2148f.html</a><br/><br/>以下是腾讯QQ2010的安装例子, 这里只是展示一下界面效果.(它和原版QQ的安装程序的最大差别就是, 以下这个例子即使在 Win9x 系统中仍然能正常运行)<br/><img src="http://restools.hanzify.org/attachments/month_1011/42010116142355.GIF" border="0" alt=""/><br/><span style="color:Blue"><strong>附件：</strong></span><br/><span style="font-size:14pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/other/QQSetup.rar">http://restools.hanzify.org/inno/other/QQSetup.rar</a></strong></span><br/><br/><span style="font-size:13pt"><span style="color:Blue">2011-11-28 增加<a href="http://nsis.sourceforge.net" target="_blank"> NSIS </a>下 UI 插件, 100KB 以内的消耗创建完美界面.</span></span><br/><span style="font-size:14pt"><strong><a target="_blank" href="http://restools.hanzify.org/nsis/nsUI_test.rar">http://restools.hanzify.org/nsis/nsUI_test.rar</a></strong></span><br/><img src="http://restools.hanzify.org/nsis/snap.jpg" border="0" alt=""/><br/><br/>当然，本人对于界面设计尤为有兴趣，所以你发现本人 BLOG 上大多数插件都是为了控制界面的。<br/>本人对于未来界面的预想，当然不只是不规则窗口，重要的当然还是要有动态效果，例如光环在手指周围转动这样的效果，当然，这是理想的效果，目前仍在努力当中。<br/><br/>如需要洽谈相关付费项目内容，请联系 restools#21cn.com 或 restools#163.com ( 请把 # 更换为 @ )。<br/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://restools.hanzify.org/default.asp?id=112" /> 
	  <id>http://restools.hanzify.org/default.asp?id=112</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Inno Setup GIF 显示插件 GIFCtrl (V2.1 版本)]]></title>
	  <author>
		 <name>xin</name>
		 <uri>http://restools.hanzify.org/</uri>
		 <email>restools@21cn.com</email>
	  </author>
	  <category term="" scheme="http://restools.hanzify.org/default.asp?cateID=7" label="InnoSetup 使用技巧" /> 
	  <updated>2011-01-01T14:45:42+08:00</updated>
	  <published>2011-01-01T14:45:42+08:00</published>
		  <summary type="html"><![CDATA[<img src="http://restools.hanzify.org/attachments/month_0804/120084921575.gif" border="0" alt=""/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://restools.hanzify.org/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用来自  test.iss "/> 引用来自  test.iss </div><div class="UBBContent"><span style="font-family:Courier New"><span style="color:#000000"><span style="color:#008000">; -- test.iss --<br/>; restools<br/>; <a href="http://restools.hanzify.org" target="_blank">http://restools.hanzify.org</a><br/>; gifctrl.dll 为一个用于<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>的 13 KB 的 gif 显示插件，同样可以显示 BMP 和 JPEG。<br/><br/>; V2.1 可以同时显示 64 个 GIF 图片。解决插件加载后卸载时的延迟问题.<br/><br/></span><strong>[Setup]<br/></strong><span style="color:#0000FF">AppName</span>=gifctrl<br/><span style="color:#0000FF">AppVerName</span>=gifctrl Ver 2.1<br/><span style="color:#0000FF">DefaultDirName</span>=<span style="color:#8000C0">{pf}</span>\gifctrl<br/><span style="color:#0000FF">DefaultGroupName</span>=gifctrl<br/><span style="color:#0000FF">OutputDir</span>=userdocs:Inno Setup Examples Output<br/><span style="color:#0000FF">SolidCompression</span>=yes<br/><br/><strong>[Files]<br/></strong><span style="color:#0000FF">Source</span>: &#34;gifctrl.dll&#34;; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy solidbreak<br/></span><span style="color:#0000FF">Source</span>: nsisinstall.gif; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy solidbreak<br/></span><span style="color:#0000FF">Source</span>: 0023.gif; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy solidbreak<br/></span><span style="color:#0000FF">Source</span>: &#34;MyProg.exe&#34;; <span style="color:#0000FF">DestDir</span>: &#34;<span style="color:#8000C0">{app}</span>&#34;<br/><span style="color:#0000FF">Source</span>: &#34;Readme.txt&#34;; <span style="color:#0000FF">DestDir</span>: &#34;<span style="color:#8000C0">{app}</span>&#34;; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">isreadme<br/><br/></span><strong>[Icons]<br/></strong><span style="color:#0000FF">Name</span>: &#34;<span style="color:#8000C0">{group}</span>\gifctrl&#34;; <span style="color:#0000FF">Filename</span>: &#34;<span style="color:#8000C0">{app}</span>\MyProg.exe&#34;<br/><br/><strong>[code]<br/></strong><span style="color:#0000FF">const<br/>&nbsp;&nbsp; </span>HALIGN_CENTER = 0; <span style="color:#008000">//水平居中<br/>&nbsp;&nbsp; </span>HALIGN_LEFT = 1;&nbsp;&nbsp; <span style="color:#008000">//水平靠左<br/>&nbsp;&nbsp; </span>HALIGN_RIGHT = 2;&nbsp;&nbsp;<span style="color:#008000">//水平靠右<br/><br/>&nbsp;&nbsp; </span>VALIGN_CENTER = 0; <span style="color:#008000">//垂直居中<br/>&nbsp;&nbsp; </span>VALIGN_TOP = 1;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">//垂直靠上<br/>&nbsp;&nbsp; </span>VALIGN_BOTTOM = 2; <span style="color:#008000">//垂直靠下<br/><br/>&nbsp;&nbsp; </span>FIT_NONE = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">//不适应窗口<br/>&nbsp;&nbsp; </span>FIT_WIDTH = 1;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008000">//适应窗口宽度<br/>&nbsp;&nbsp; </span>FIT_HEIGHT = 2;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">//适应窗口高度<br/>&nbsp;&nbsp; </span>FIT_BOTH = 3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">//适应窗口宽度和高度<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp; </span>CLR_INVALID = $FFFFFFFF; <span style="color:#008000">//自动取容器左上角的颜色作为底色，如果取色失败，用按钮颜色代替。<br/><br/>// 创建 Gif 窗口<br/></span><span style="color:#0000FF">function </span>NewGifbWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;newgifwnd@files:gifctrl.dll stdcall&#39;</span>;<br/><br/><span style="color:#008000">// 释放 Gif 窗口<br/></span><span style="color:#0000FF">function </span>FreeGifWnd(hWndGif: HWND): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;freegifwnd@files:gifctrl.dll stdcall&#39;</span>;<br/><br/><span style="color:#008000">// 释放所有 Gif 窗口<br/></span><span style="color:#0000FF">function </span>FreeAllGifWnd(): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;freeallgifwnd@files:gifctrl.dll stdcall&#39;</span>;<br/><br/><span style="color:#008000">// 设置 Gif 窗口的父窗口<br/></span><span style="color:#0000FF">function </span>GifWndSetParent(hWndGif: HWND; hWndParent: HWND): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;gifwndsetparent@files:gifctrl.dll stdcall&#39;</span>;<br/><br/><span style="color:#008000">// 设置 Gif 窗口的位置大小<br/></span><span style="color:#0000FF">function </span>GifWndSetBounds(hWndGif: HWND; X, Y, nWidth, nHeight: Integer): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;gifwndsetbounds@files:gifctrl.dll stdcall&#39;</span>;<br/><br/><span style="color:#008000">// 载入图片，并设置图片显示位置<br/></span><span style="color:#0000FF">function </span>GifWndLoadFromFile(hWndGif: HWND; HAlign, VAlign: Integer; BGColor: DWord; Fit: integer; GifFileName: PChar): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;gifwndloadfromfile@files:gifctrl.dll stdcall&#39;</span>;<br/><span style="color:#008000">// 第1 次载入需要指定图片文件“GifFileName”，然后在需要重新载入另外图片的时候重新指定另外的图片文件，重新调整 Align 位置时也需要调用此函数，<br/>// 但是如果只是为了调整 Align 而不想重新载入一次 GifFileName 文件，只需要把 GifFileName 设置为空字符串就可以达到只调整位置，不重载文件。<br/><br/></span><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>GifPanel: TPanel;<br/>&nbsp;&nbsp;GIFHWND1, GIFHWND2: HWND;<br/><br/><span style="color:#0000FF">function </span><strong>InitializeSetup</strong>(): Boolean;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>GIFHWND1 := 0;<br/>&nbsp;&nbsp;GIFHWND2 := 0;<br/>&nbsp;&nbsp;Result := True;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span><strong>DeinitializeSetup</strong>();<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>FreeAllGifWnd();<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>LblOnClick(Sender: TObject);<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>ErrorCode: Integer;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>ShellExec(<span style="color:#800080">&#39;open&#39;</span>, <span style="color:#800080">&#39;<a href="http://restools.hanzify.org" target="_blank">http://restools.hanzify.org</a>&#39;</span>, <span style="color:#800080">&#39;&#39;</span>, <span style="color:#800080">&#39;&#39;</span>, SW_SHOWNORMAL, ewNoWait, ErrorCode);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span><strong>InitializeWizard</strong>();<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>GifFileName: <span style="color:#0000FF">String</span>;<br/>&nbsp;&nbsp;Lbl: TNewStaticText;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>ExtractTemporaryFile(<span style="color:#800080">&#39;nsisinstall.gif&#39;</span>);<br/>&nbsp;&nbsp;ExtractTemporaryFile(<span style="color:#800080">&#39;0023.gif&#39;</span>);<br/><br/>&nbsp;&nbsp;GIFHWND1 := NewGifbWnd(WizardForm.InstallingPage.Handle, 0, WizardForm.PROGRESSGAUGE.Top + WizardForm.PROGRESSGAUGE.Height + SCaleY(5),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WizardForm.InstallingPage.Width, WizardForm.InstallingPage.Height - (WizardForm.PROGRESSGAUGE.Top<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + WizardForm.PROGRESSGAUGE.Height + SCaleY(5)));<br/>&nbsp;&nbsp;GifWndLoadFromFile(GIFHWND1, HALIGN_CENTER, VALIGN_BOTTOM, CLR_INVALID, FIT_WIDTH, ExpandConstant(<span style="color:#800080">&#39;{tmp}\nsisinstall.gif&#39;</span>));<br/><br/>&nbsp;&nbsp;<span style="color:#008000">// 创建一个网站 Logo 连接<br/>&nbsp;&nbsp;</span>GIFHWND2 := NewGifbWnd(WizardForm.Handle, ScaleX(30), WizardForm.Bevel.Top + ScaleY(8), 88, 31);<br/>&nbsp;&nbsp;GifWndLoadFromFile(GIFHWND2, HALIGN_CENTER, VALIGN_CENTER, CLR_INVALID, FIT_NONE, ExpandConstant(<span style="color:#800080">&#39;{tmp}\0023.gif&#39;</span>));<br/>&nbsp;&nbsp;Lbl := TNewStaticText.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;Lbl.Parent := WizardForm;<br/>&nbsp;&nbsp;Lbl.AutoSize := False;<br/>&nbsp;&nbsp;Lbl.SetBounds(ScaleX(30), WizardForm.Bevel.Top + ScaleY(8), 88, 31);<br/>&nbsp;&nbsp;Lbl.OnClick := @LblOnClick;<br/>&nbsp;&nbsp;Lbl.Cursor := crHand;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span><strong>CurPageChanged</strong>(CurPageID: Integer);<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;if </span>CurPageID = wpInstalling <span style="color:#0000FF">then<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>MsgBox(<span style="color:#800080">&#39;暂停一下，看看效果。&#39;</span>, mbInformation, MB_OK);<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><span style="color:#0000FF">end</span>;<br/></span></span></div></div><br/><br/>点击下面连接下载例子。<br/><span style="font-size:14pt"><a target="_blank" href="http://restools.hanzify.org/inno/gifctrl/inno_gifctrl_v2.1.zip">http://restools.hanzify.org/inno/gifctrl/inno_gifctrl_v2.1.zip</a></span><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://restools.hanzify.org/default.asp?id=79" /> 
	  <id>http://restools.hanzify.org/default.asp?id=79</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Inno Setup 精灵显示插件 InnoFairy (V2.0 版本)]]></title>
	  <author>
		 <name>xin</name>
		 <uri>http://restools.hanzify.org/</uri>
		 <email>restools@21cn.com</email>
	  </author>
	  <category term="" scheme="http://restools.hanzify.org/default.asp?cateID=7" label="InnoSetup 使用技巧" /> 
	  <updated>2010-10-11T21:30:17+08:00</updated>
	  <published>2010-10-11T21:30:17+08:00</published>
		  <summary type="html"><![CDATA[一个如影随形的小精灵会令到你的安装程序更加人性化. 就是这样一个功能的<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>插件, 希望大家喜欢. ^_^<br/><span style="color:Blue">Ver2.0 版本: 采用 GDI+ 来处理图片, 所以支持多种类型(bmp, jpg, gif, png, tiff, emf)图片. 并且插件大小缩小为 49KB.</span><br/><span style="color:Red">注:插件在 Win2000 以上系统有效.</span><br/><img src="http://restools.hanzify.org/attachments/month_1009/t201092518441.GIF" border="0" alt=""/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://restools.hanzify.org/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用来自  fairy.iss "/> 引用来自  fairy.iss </div><div class="UBBContent"><span style="font-family:Courier New"><span style="color:#000000"><span style="color:#008000">;<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>精灵插件 ver 2.0<br/><br/></span><strong>[Files]<br/></strong><span style="color:#0000FF">Source</span>: &#34;fairy.dll&#34;; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy<br/><br/></span><strong>[code]<br/></strong><span style="color:#0000FF">type<br/>&nbsp;&nbsp;</span>TAddingFinishCallbackProc = <span style="color:#0000FF">procedure</span>(FrameCount: Integer);<br/>&nbsp;&nbsp;TPlayFinishCallbackProc = <span style="color:#0000FF">procedure</span>();<br/><br/><span style="color:#0000FF">function </span>InitFairy(hParentWnd: HWND; RelativePos: Integer; Interval: Cardinal): Boolean;<br/><span style="color:#0000FF">external </span><span style="color:#800080">&#39;InitFairy@files:fairy.dll stdcall&#39;</span>;<br/><span style="color:#008000">// 初始化精灵插件:<br/>// hParentWnd: 需要粘附的窗口句柄, 精灵会跟随这个窗口移动.<br/>// RelativePos: 精灵跟随窗口移动的相对位置.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0: 以窗口左上角为原点, 所有制定的 X, Y 坐标都是相对于该原点的距离.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1: 以窗口右上角为原点.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2: 以窗口左下角为原点.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3: 以窗口右下角为原点.<br/>// Interval: 每个图片更新的速度(时间间隔, 单位: ms). 用来微调动作的快慢. 但是动作演示的快慢主要还是由制定图片序列的时候处理,<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如 100ms 下的更新速度是比较合理的, 也就是 1 秒钟更新 10 张图片. 所以在制定动作的时候以这个作为参考就好处理了.<br/><br/></span><span style="color:#0000FF">function </span>AddImgsToList(BmpFiles: AnsiString; FinishCallback: TAddingFinishCallbackProc): Boolean;<br/><span style="color:#0000FF">external </span><span style="color:#800080">&#39;AddImgsToList@files:fairy.dll stdcall&#39;</span>;<br/><span style="color:#008000">// 添加图片到精灵插件中.<br/>// BmpFiles: 批量图片处理的序列.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;格式: X1|Y1|BlendAlpha1|TransparentColor1|ImgFile1|X2|Y2|BlendAlpha2|TransparentColor2|ImgFile2|X3|Y3|BlendAlpha3|TransparentColor3|ImgFile3|.........<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X: 相对于原点的水平坐标.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Y: 相对于原点的垂直坐标.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BlendAlpha: 精灵的整体透明程度. 不同于图片自身的透明通道, 即使图片有自身的 Alpha 通道,<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不透明的部分仍然会受 BlendAlpha 的影响.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TransparentColor: 透明颜色. 当图片没有 Alpha 通道的时候, 就会由该颜色定义透明部分.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImgFile: 图片文件. 因为改用 GDI+ 作为精灵的图片引擎, 所以将会支持多种(bmp, gif, tiff, emf, jpg)图片格式.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当图片带有 Alpha 通道的时候, 将会按照通道来调整图片透明度, 当没有 Alpha 通道的时候, 就会按照 TransparentColor<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 来定义透明部分. 另外, 对于 GIF, 如果属于动画的多帧图片, 精灵将会在载入时自动把图片分帧载入.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以将会非常方便精灵的制作.<br/>// FinishCallback: 因为批量添加大量图片可能会引起程序假死, 所以我采用线程处理, 所以在载入图片的过程中, 安装程序仍然可以同步运行.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所以 FinishCallback 就是添加图片过程完成的时候调用的回调函数, 通常都是在这个函数中调用 AnimateFairy 来运行精灵.<br/><br/></span><span style="color:#0000FF">function </span>AddImgToList(X, Y: Integer; BlendAlpha: Byte; TransparentColor: Integer; ImgFile: AnsiString): Integer;<br/><span style="color:#0000FF">external </span><span style="color:#800080">&#39;AddImgToList@files:fairy.dll stdcall&#39;</span>;<br/><span style="color:#008000">// 添加图片到精灵插件中.<br/>// 属于单图片添加, 基本上这个函数只是给用户在程序中灵活运用而已, 上一函数已能完成此任务.<br/>// 参数请参看上一函数中的解释.<br/><br/></span><span style="color:#0000FF">function </span>ClearImgList(): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;ClearImgList@files:fairy.dll stdcall&#39;</span>;<br/><span style="color:#008000">// 清除图片序列中的所有图片.<br/>// 因为图片是顺序添加到序列中的, 所以如果需要重新排列图片, 必须清除所有图片, 重新添加.<br/><br/></span><span style="color:#0000FF">function </span>AnimateFairy(IndexList: AnsiString; FinishCallback: TPlayFinishCallbackProc): Boolean;<br/><span style="color:#0000FF">external </span><span style="color:#800080">&#39;AnimateFairy@files:fairy.dll stdcall&#39;</span>;<br/><span style="color:#008000">// 运行精灵, 也就是相当于序列图片的连续显示.<br/>// IndexList: 播放序列, 具体的使用方法请看以下几个例子.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例子:<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0-53,(54-79)<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解释: 0 到 53 帧, 然后 54 到 79 帧循环播放, 无限循环, 不会结束, 也就是说不会触发 FinishCallback 事件.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0-53,3(54-79)<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解释: 具体跟上一例子的差别是 54 到 79 帧循环播放 3 次后结束, 并调用 FinishCallback 回调函数.<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10-2,13,45,60,54,2(70-0),(50-70)<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解释: 10 到 2 帧倒序播放, 然后顺序显示 13,45,60,54 帧, 然后倒序循环播放 2 次 70 到 0 帧, 再然后无限循环播放 50 到 70 帧.<br/>// FinishCallback: 如果播放序列没有无限循环, 则在结束播放后, 就会调用这个回调函数.<br/><br/></span><span style="color:#0000FF">function </span>StopFairy(): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;StopFairy@files:fairy.dll stdcall&#39;</span>;<br/><span style="color:#008000">// 停止播放.<br/><br/></span><span style="color:#0000FF">function </span>ResumeFairy(): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;ResumeFairy@files:fairy.dll stdcall&#39;</span>;<br/><span style="color:#008000">// 显示并恢复播放.<br/><br/></span><span style="color:#0000FF">function </span>HideFairy(): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;HideFairy@files:fairy.dll stdcall&#39;</span>;<br/><span style="color:#008000">// 隐藏并停止播放.<br/><br/></span><span style="color:#0000FF">function </span>ShowFairy(): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;ShowFairy@files:fairy.dll stdcall&#39;</span>;<br/><span style="color:#008000">// 显示精灵.<br/><br/></span><span style="color:#0000FF">function </span>ShowFairyEx(ImgIndex: Integer): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;ShowFairyEx@files:fairy.dll stdcall&#39;</span>;<br/><span style="color:#008000">// 显示某一帧的精灵.<br/><br/></span><span style="color:#0000FF">procedure </span>UninitFairy(); <span style="color:#0000FF">external </span><span style="color:#800080">&#39;UninitFairy@files:fairy.dll stdcall&#39;</span>;<br/><span style="color:#008000">// 解除精灵插件.<br/><br/>// 精灵虽然会显示在主窗口的上面, 但是并不会遮挡鼠标的操作, 即使精灵下有一个按钮, 鼠标仍然可以穿透精灵点击后面的按钮.<br/>// 但是对于非主窗口的其他窗口, 鼠标操作并不能穿透.</span></span></span></div></div><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://restools.hanzify.org/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用来自  Example.iss "/> 引用来自  Example.iss </div><div class="UBBContent"><span style="font-family:Courier New"><span style="color:#000000"><span style="color:#FF0000">#include &#34;fairy.iss&#34;<br/><br/></span><span style="color:#008000">// 这是一个令到你的安装程序更加人性化的<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>插件.<br/><br/>// 注释或取消注释下面的 ImgType 定义, 可以选择不同的图片类型作为精灵插件的显示.<br/>// 具体图片处理的区别请参阅 fairy.iss 函数定义中的解释.<br/><br/></span><span style="color:#FF0000">#define ImgType 0<br/></span><span style="color:#008000">//#define ImgType 1<br/>//#define ImgType 2<br/><br/></span><strong>[Setup]<br/></strong><span style="color:#0000FF">AppName</span>=fairy<br/><span style="color:#0000FF">AppVerName</span>=fairy Ver 2.0<br/><span style="color:#0000FF">DefaultDirName</span>=<span style="color:#FF4040">{pf}</span>\fairy<br/><span style="color:#0000FF">DefaultGroupName</span>=fairy<br/><span style="color:#0000FF">OutputDir</span>=userdocs:Inno Setup Examples Output<br/><span style="color:#0000FF">OutputBaseFilename</span>=setup<br/><span style="color:#0000FF">SolidCompression</span>=yes<br/><br/><strong>[Files]<br/></strong><span style="color:#FF0000">#if ImgType == 0<br/></span><span style="color:#008000">; 带 Alpha 通道的 32bit 位图 Bitmap<br/></span><span style="color:#0000FF">Source</span>: &#34;bmp_32bit_Alpha\*.bmp&#34;; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy<br/></span><span style="color:#FF0000">#elif ImgType == 1<br/></span><span style="color:#008000">; 普通位图 Bitmap<br/></span><span style="color:#0000FF">Source</span>: &#34;bmp\*.bmp&#34;; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy<br/></span><span style="color:#FF0000">#elif ImgType == 2<br/></span><span style="color:#008000">; PNG<br/></span><span style="color:#0000FF">Source</span>: &#34;png\*.png&#34;; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy<br/></span><span style="color:#FF0000">#endif<br/><br/></span><strong>[code]<br/></strong><span style="color:#0000FF">function </span>GetSysColor(nIndex: Integer): DWORD; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;GetSysColor@user32.dll stdcall&#39;</span>;<br/><span style="color:#0000FF">function </span>GetSystemMetrics(nIndex: Integer): Integer; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;GetSystemMetrics@user32.dll stdcall&#39;</span>;<br/><br/><span style="color:#0000FF">const<br/>&nbsp;&nbsp;</span>SM_CYBORDER = 6;<br/>&nbsp;&nbsp;SM_CYDLGFRAME = 8;<br/><br/><span style="color:#0000FF">function </span>ColorToRGB(Color: TColor): Longint;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;if </span>Color &lt; 0 <span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Result := GetSysColor(Color <span style="color:#0000FF">and </span>$000000FF)<br/>&nbsp;&nbsp;<span style="color:#0000FF">else<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Result := Color;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>FinishPlayCallback();<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>MsgBox(<span style="color:#800080">&#39;FinishPlay&#39;</span>, mbInformation, MB_OK);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>PlayListCallback2(FrameCount: Integer);<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>AnimateFairy(<span style="color:#800080">&#39;0-53,2(54-79)&#39;</span>, @FinishPlayCallback);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>PlayListCallback(FrameCount: Integer);<br/><span style="color:#0000FF">begin<br/></span><span style="color:#008000">//&nbsp;&nbsp;ShowFairyEx(10);<br/>&nbsp;&nbsp;</span>AnimateFairy(<span style="color:#800080">&#39;0-53,(54-79)&#39;</span>, <span style="color:#0000FF">nil</span>);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>BtnOnClick(Sender: TObject);<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>i, BAlpha, TransparentColor: Integer;<br/>&nbsp;&nbsp;x, y: Integer;<br/>&nbsp;&nbsp;ImgFile: AnsiString;<br/>&nbsp;&nbsp;S: AnsiString;<br/>&nbsp;&nbsp;BH: Integer;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>ClearImgList;<br/>&nbsp;&nbsp;InitFairy(WizardForm.Handle, TNewButton(Sender).Tag, 100);<br/>&nbsp;&nbsp;S := <span style="color:#800080">&#39;&#39;</span>;<br/>&nbsp;&nbsp;BH := GetSystemMetrics(SM_CYBORDER) + GetSystemMetrics(SM_CYDLGFRAME);<br/>&nbsp;&nbsp;<span style="color:#0000FF">if </span>TNewButton(Sender).Caption = <span style="color:#800080">&#39;4&#39; </span><span style="color:#0000FF">then<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>x := 180; y := -88-BH;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end else<br/>&nbsp;&nbsp;&nbsp;&nbsp;case </span>TNewButton(Sender).Tag <span style="color:#0000FF">of<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>0: <span style="color:#0000FF">begin </span>x := 80; y := -88; <span style="color:#0000FF">end</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;1: <span style="color:#0000FF">begin </span>x := -170; y := -88; <span style="color:#0000FF">end</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;2: <span style="color:#0000FF">begin </span>x := 80; y := -88-BH; <span style="color:#0000FF">end</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;3: <span style="color:#0000FF">begin </span>x := -170; y := -88-BH; <span style="color:#0000FF">end</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/>&nbsp;&nbsp;BAlpha := 30;<br/>&nbsp;&nbsp;TransparentColor := ColorToRGB(clFuchsia);<br/>&nbsp;&nbsp;<span style="color:#0000FF">for </span>i := 0 <span style="color:#0000FF">to </span>7 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/></span><span style="color:#FF0000">#if ImgType == 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>ImgFile := format(<span style="color:#800080">&#39;%.2d&#39;</span>,[i+1])+<span style="color:#800080">&#39;.png&#39;</span>;<br/><span style="color:#FF0000">#else<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>ImgFile := format(<span style="color:#800080">&#39;%.2d&#39;</span>,[i+1])+<span style="color:#800080">&#39;.bmp&#39;</span>;<br/><span style="color:#FF0000">#endif<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#0000FF">if </span>S &lt;&gt; <span style="color:#800080">&#39;&#39; </span><span style="color:#0000FF">then </span>S := S + <span style="color:#800080">&#39;|&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;S := S + IntToStr(x) + <span style="color:#800080">&#39;|&#39; </span>+ IntToStr(y) + <span style="color:#800080">&#39;|&#39; </span>+ IntToStr(BAlpha) + <span style="color:#800080">&#39;|&#39; </span>+ IntToStr(TransparentColor) + <span style="color:#800080">&#39;|&#39; </span>+ ExpandConstant(<span style="color:#800080">&#39;{tmp}\&#39;</span>+ImgFile);<br/>&nbsp;&nbsp;&nbsp;&nbsp;BAlpha := BAlpha + 30;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;<span style="color:#0000FF">for </span>i := 8 <span style="color:#0000FF">to </span>79 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/></span><span style="color:#FF0000">#if ImgType == 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>ImgFile := format(<span style="color:#800080">&#39;%.2d&#39;</span>,[i+1])+<span style="color:#800080">&#39;.png&#39;</span>;<br/><span style="color:#FF0000">#else<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>ImgFile := format(<span style="color:#800080">&#39;%.2d&#39;</span>,[i+1])+<span style="color:#800080">&#39;.bmp&#39;</span>;<br/><span style="color:#FF0000">#endif<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#0000FF">if </span>S &lt;&gt; <span style="color:#800080">&#39;&#39; </span><span style="color:#0000FF">then </span>S := S + <span style="color:#800080">&#39;|&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;S := S + IntToStr(x) + <span style="color:#800080">&#39;|&#39; </span>+ IntToStr(y) + <span style="color:#800080">&#39;|&#39; </span>+ IntToStr(255) + <span style="color:#800080">&#39;|&#39; </span>+ IntToStr(TransparentColor) + <span style="color:#800080">&#39;|&#39; </span>+ ExpandConstant(<span style="color:#800080">&#39;{tmp}\&#39;</span>+ImgFile);<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/>&nbsp;&nbsp;<span style="color:#0000FF">if </span>TNewButton(Sender).Caption = <span style="color:#800080">&#39;4&#39; </span><span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>AddImgsToList(S, @PlayListCallback2)<br/>&nbsp;&nbsp;<span style="color:#0000FF">else<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>AddImgsToList(S, @PlayListCallback);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span><strong>InitializeWizard</strong>();<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>Btn: TNewButton;<br/>&nbsp;&nbsp;ImgFile: AnsiString;<br/>&nbsp;&nbsp;i: Integer;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;for </span>i := 0 <span style="color:#0000FF">to </span>79 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/></span><span style="color:#FF0000">#if ImgType == 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>ImgFile := format(<span style="color:#800080">&#39;%.2d&#39;</span>,[i+1])+<span style="color:#800080">&#39;.png&#39;</span>;<br/><span style="color:#FF0000">#else<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>ImgFile := format(<span style="color:#800080">&#39;%.2d&#39;</span>,[i+1])+<span style="color:#800080">&#39;.bmp&#39;</span>;<br/><span style="color:#FF0000">#endif<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>ExtractTemporaryFile(ImgFile);<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;WizardForm.BorderIcons := [biSystemMenu,biMinimize,biMaximize];<br/>&nbsp;&nbsp;WizardForm.BorderStyle := bsSizeable;<br/>&nbsp;&nbsp;WizardForm.WelcomeLabel2.Caption := <span style="color:#800080">&#39;尝试改变窗口大小, 可以测试精灵插件对于窗口的相对位置的效果.&#39;</span>+#13#10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800080">&#39;按钮0: 以窗口左上角做原点. 0-53,(54-79) 无限循环.&#39;</span>+#13#10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800080">&#39;按钮1: 以窗口右上角做原点. 0-53,(54-79) 无限循环.&#39;</span>+#13#10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800080">&#39;按钮2: 以窗口左下角做原点. 0-53,(54-79) 无限循环.&#39;</span>+#13#10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800080">&#39;按钮3: 以窗口右下角做原点. 0-53,(54-79) 无限循环.&#39;</span>+#13#10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800080">&#39;按钮4: 以窗口左下角做原点. 0-53,2(54-79) 循环 2 次结束.&#39;</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>TNewButton.Cr&#101;ate(WizardForm) <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Parent := WizardForm.WelcomePage;<br/>&nbsp;&nbsp;&nbsp;&nbsp;SetBounds(ScaleX(216), ScaleY(207), ScaleX(19), ScaleY(23));<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#800080">&#39;0&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Tag := 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;OnClick := @BtnOnClick;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;Btn := TNewButton.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>Btn <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Parent := WizardForm.WelcomePage;<br/>&nbsp;&nbsp;&nbsp;&nbsp;SetBounds(ScaleX(240), ScaleY(207), ScaleX(19), ScaleY(23));<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#800080">&#39;1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Tag := 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;OnClick := @BtnOnClick;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>TNewButton.Cr&#101;ate(WizardForm) <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Parent := WizardForm.WelcomePage;<br/>&nbsp;&nbsp;&nbsp;&nbsp;SetBounds(ScaleX(264), ScaleY(207), ScaleX(19), ScaleY(23));<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#800080">&#39;2&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Tag := 2;<br/>&nbsp;&nbsp;&nbsp;&nbsp;OnClick := @BtnOnClick;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>TNewButton.Cr&#101;ate(WizardForm) <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Parent := WizardForm.WelcomePage;<br/>&nbsp;&nbsp;&nbsp;&nbsp;SetBounds(ScaleX(288), ScaleY(207), ScaleX(19), ScaleY(23));<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#800080">&#39;3&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Tag := 3;<br/>&nbsp;&nbsp;&nbsp;&nbsp;OnClick := @BtnOnClick;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>TNewButton.Cr&#101;ate(WizardForm) <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Parent := WizardForm.WelcomePage;<br/>&nbsp;&nbsp;&nbsp;&nbsp;SetBounds(ScaleX(368), ScaleY(207), ScaleX(19), ScaleY(23));<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#800080">&#39;4&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Tag := 2;<br/>&nbsp;&nbsp;&nbsp;&nbsp;OnClick := @BtnOnClick;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;BtnOnClick(Btn);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span><strong>DeinitializeSetup</strong>();<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>HideFairy;<br/>&nbsp;&nbsp;WizardForm.Hide;<br/>&nbsp;&nbsp;UninitFairy;<br/><span style="color:#0000FF">end</span>;</span></span></div></div><br/><br/><br/><span style="color:Red">下载地址：</span><br/><span style="font-size:12pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/InnoFairy/InnoFairy_v2(7zip).zip">http://restools.hanzify.org/inno/InnoFairy/InnoFairy_v2(7zip).zip</a></strong></span><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://restools.hanzify.org/default.asp?id=111" /> 
	  <id>http://restools.hanzify.org/default.asp?id=111</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Inno Setup 网页显示插件 webctrl (V2.1 版本)]]></title>
	  <author>
		 <name>xin</name>
		 <uri>http://restools.hanzify.org/</uri>
		 <email>restools@21cn.com</email>
	  </author>
	  <category term="" scheme="http://restools.hanzify.org/default.asp?cateID=7" label="InnoSetup 使用技巧" /> 
	  <updated>2010-08-06T22:45:00+08:00</updated>
	  <published>2010-08-06T22:45:00+08:00</published>
		  <summary type="html"><![CDATA[<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>网页显示插件 webctrl<br/>能够显示所有 IE 中能够显示的东西。<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://restools.hanzify.org/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent"><span style="font-family:Courier New"><span style="color:#000000"><span style="color:#008000">; -- Example.iss --<br/>; restools<br/>; <a href="http://restools.hanzify.org" target="_blank">http://restools.hanzify.org</a><br/>; 插件名：webctrl.dll<br/>; 插件功能：网络连接检测，创建网页页面。<br/>; 插件大小：9 KB<br/><br/>; V2 增强操作函数，可以同时创建多达 256 个 Web 窗口。<br/>; V2 例子中演示了建立一个小型浏览器以体现该版本中的函数如何使用。比起 V1 重点在于能同时创建多个 Web 窗口。<br/>; V2.1 删除 InitWebCtrl 和 UninitWebCtrl 函数, 增加 FreeAllWebWnd. 改善某些情况下不能卸载插件的问题.<br/><br/></span><strong>[Setup]<br/></strong><span style="color:#0000FF">AppName</span>=My Application<br/><span style="color:#0000FF">AppVersion</span>=1.5<br/><span style="color:#0000FF">DefaultDirName</span>=<span style="color:#FF4040">{pf}</span>\My Application<br/><span style="color:#0000FF">OutputDir</span>=userdocs:Inno Setup Examples Output<br/><br/><strong>[Files]<br/></strong><span style="color:#0000FF">Source</span>: &#34;webctrl.dll&#34;; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy<br/></span><span style="color:#0000FF">Source</span>: &#34;file.htm&#34;; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy<br/></span><span style="color:#0000FF">Source</span>: &#34;wizard.htm&#34;; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy<br/></span><span style="color:#0000FF">Source</span>: &#34;1.gif&#34;; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy<br/></span><span style="color:#0000FF">Source</span>: &#34;2.gif&#34;; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy<br/></span><span style="color:#0000FF">Source</span>: &#34;3.gif&#34;; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy<br/><br/></span><strong>[code]<br/></strong><span style="color:#0000FF">function </span>GetSystemMetrics(nIndex: Integer): Integer; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;GetSystemMetrics@user32.dll stdcall&#39;</span>;<br/><span style="color:#0000FF">function </span>GetWindowLong(Wnd: HWnd; Index: Integer): Longint; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;GetWindowLongA@user32.dll stdcall&#39;</span>;<br/><span style="color:#0000FF">function </span>SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;SetWindowLongA@user32.dll stdcall&#39;</span>;<br/><span style="color:#008000">////////////////////////////////////////////////////////////////////////////////////<br/>// 检查网络连接是否正常<br/>// lpszURL: 网址，如果这里设置为空网址，检测将会简单的检查网络状态，返回状态标志<br/>// lpdwState: 状态标志，以下是标志值的解释<br/>// 注意：当不用网址来检测网络连接时，只是检查当前是否符合网络连接的条件，但是并不等于<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 能正常连接 Internet，但是这种检测方式相当迅速，如果使用网址连接测试，如果网<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 络处于正常连接，检查速度也相当快，但是如果非正常，那么将会有一点时间延迟，因<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为实际的连接测试有一个超时的限制来判断是否能够连接。但是这种检测方式是最直接<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 的，并能确实知道是否能够连接网络，所以你按照实际要求来选择检测方式。<br/>//<br/>//得到的 lpdwState 返回值可能是以下值的一个或几个值之和：<br/>//&nbsp;&nbsp;INTERNET_STATE_CONNECTED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ：$00000001 连接状态；<br/>//&nbsp;&nbsp;INTERNET_STATE_DISCONNECTED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;：$00000002 非连接状态（和 INTERNET_STATE_CONNECTED 对应）；<br/>//&nbsp;&nbsp;INTERNET_STATE_DISCONNECTED_BY_USER：$00000010 用户请求的非连接状态<br/>//&nbsp;&nbsp;INTERNET_STATE_IDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;：$00000100 连接状态，并且空闲<br/>//&nbsp;&nbsp;INTERNET_STATE_BUSY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;：$00000200 连接状态，正在响应连接请求<br/></span><span style="color:#0000FF">function </span>CheckConnectState(lpsURL: PChar; <span style="color:#0000FF">var </span>lpdwState: dword): boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;checkconnectstate@files:webctrl.dll stdcall&#39;</span>;<br/><br/><span style="color:#008000">// 创建 WEB 窗口<br/></span><span style="color:#0000FF">function </span>NewWebWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;newwebwnd@files:webctrl.dll stdcall&#39;</span>;<br/><br/><span style="color:#008000">// 释放 WEB 窗口<br/></span><span style="color:#0000FF">function </span>FreeWebWnd(hWndWeb: HWND): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;freewebwnd@files:webctrl.dll stdcall&#39;</span>;<br/><br/><span style="color:#008000">// 释放所有 WEB 窗口, 此函数对于卸载插件很重要, 必须在结束安装之前调用才能顺利卸载插件.<br/></span><span style="color:#0000FF">function </span>FreeAllWebWnd(): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;freeallwebwnd@files:webctrl.dll stdcall&#39;</span>;<br/><br/><span style="color:#008000">// 设置 WEB 窗口的父窗口<br/></span><span style="color:#0000FF">function </span>WebWndSetParent(hWndWeb: HWND; hWndParent: HWND): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;webwndsetparent@files:webctrl.dll stdcall&#39;</span>;<br/><br/><span style="color:#008000">// 设置 WEB 窗口的位置大小<br/></span><span style="color:#0000FF">function </span>WebWndSetBounds(hWndWeb: HWND; X, Y, nWidth, nHeight: Integer): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;webwndsetbounds@files:webctrl.dll stdcall&#39;</span>;<br/><br/><span style="color:#008000">// 显示 HTML 网页<br/></span><span style="color:#0000FF">function </span>DisplayHTMLPage(hWndWeb: HWND; lpsURL: PChar): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;displayhtmlpage@files:webctrl.dll stdcall&#39;</span>;&nbsp;&nbsp;<span style="color:#008000">// ;<br/><br/>// 显示 HTML 字符串<br/></span><span style="color:#0000FF">function </span>DisplayHTMLStr(hWndWeb: HWND; lpsHtmlText: PChar): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;displayhtmlstr@files:webctrl.dll stdcall&#39;</span>;<br/><br/><span style="color:#008000">// Web 页面 动作<br/></span><span style="color:#0000FF">function </span>WebPageAction(hWndWeb: HWND; action: DWord): Boolean; <span style="color:#0000FF">external </span><span style="color:#800080">&#39;webpageaction@files:webctrl.dll stdcall&#39;</span>;<br/><br/><span style="color:#0000FF">const<br/>&nbsp;&nbsp;</span>SM_CXSCREEN = 0;<br/>&nbsp;&nbsp;SM_CYSCREEN = 1;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;WS_EX_CLIENTEDGE = $200;<br/>&nbsp;&nbsp;GWL_EXSTYLE = -20;<br/><br/>&nbsp;&nbsp;WEBPAGE_GOBACK = 0;<br/>&nbsp;&nbsp;WEBPAGE_GOFORWARD = 1;<br/>&nbsp;&nbsp;WEBPAGE_GOHOME = 2;<br/>&nbsp;&nbsp;WEBPAGE_SEARCH = 3;<br/>&nbsp;&nbsp;WEBPAGE_REFRESH = 4;<br/>&nbsp;&nbsp;WEBPAGE_STOP = 5;<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>UrlPage, HtmlPage, HtmlTextPage: TWizardPage;<br/>&nbsp;&nbsp;WebHWND1, WebHWND2, WebHWND3, WebHWND4: HWND;<br/>&nbsp;&nbsp;WebHWND_Browser: HWND;<br/>&nbsp;&nbsp;Form_Browser: TForm;<br/>&nbsp;&nbsp;AddrEdit: TNewEdit;<br/>&nbsp;&nbsp;GoBtn: TNewButton;<br/><br/><span style="color:#0000FF">function </span><strong>InitializeSetup</strong>(): Boolean;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>WebHWND1 := 0;<br/>&nbsp;&nbsp;WebHWND2 := 0;<br/>&nbsp;&nbsp;WebHWND3 := 0;<br/>&nbsp;&nbsp;WebHWND4 := 0;<br/>&nbsp;&nbsp;Result := True;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span><strong>DeinitializeSetup</strong>();<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>WizardForm.Hide;<br/>&nbsp;&nbsp;FreeAllWebWnd;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>GoBackBtnOnClick(Sender: TObject);<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>WebPageAction(WebHWND_Browser, WEBPAGE_GOBACK);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>GoForwardBtnOnClick(Sender: TObject);<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>WebPageAction(WebHWND_Browser, WEBPAGE_GOFORWARD);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>StopBtnOnClick(Sender: TObject);<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>WebPageAction(WebHWND_Browser, WEBPAGE_STOP);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>RefreshBtnOnClick(Sender: TObject);<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>WebPageAction(WebHWND_Browser, WEBPAGE_REFRESH);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>HomeBtnOnClick(Sender: TObject);<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>WebPageAction(WebHWND_Browser, WEBPAGE_GOHOME);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>GoBtnOnClick(Sender: TObject);<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>DisplayHTMLPage(WebHWND_Browser, AddrEdit.Text);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>BrowserFormResize(Sender: TObject);<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>W: Integer;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>WebWndSetBounds(WebHWND_Browser, 0, ScaleY(35), Form_Browser.ClientWidth,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form_Browser.ClientHeight - ScaleY(35));<br/>&nbsp;&nbsp;W := Form_Browser.Width - ScaleX(285);<br/>&nbsp;&nbsp;<span style="color:#0000FF">if </span>W &lt;= 0 <span style="color:#0000FF">then </span>W := 1;<br/>&nbsp;&nbsp;AddrEdit.Width := W;<br/>&nbsp;&nbsp;GoBtn.SetBounds(AddrEdit.Left + AddrEdit.Width + ScaleX(2), ScaleY(5), ScaleX(30),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WizardForm.CancelButton.Height);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>EditKeyPress(Sender: TObject; <span style="color:#0000FF">var </span>Key: Char);<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;if </span>Key = #13 <span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>DisplayHTMLPage(WebHWND_Browser, AddrEdit.Text);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>WizardBtnOnClick(Sender: TObject);<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>ScreenWidth, ScreenHeight: Integer;<br/>&nbsp;&nbsp;Btn: TNewButton;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>Form_Browser := TForm.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">try<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Form_Browser.Caption := <span style="color:#800080">&#39;ThinBrowser&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Form_Browser.BorderIcons := [biSystemMenu, biMaximize];<br/>&nbsp;&nbsp;&nbsp;&nbsp;ScreenWidth := GetSystemMetrics(SM_CXSCREEN);<br/>&nbsp;&nbsp;&nbsp;&nbsp;ScreenHeight := GetSystemMetrics(SM_CYSCREEN);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Form_Browser.SetBounds((ScreenWidth - ScaleX(600)) <span style="color:#0000FF">div </span>2, (ScreenHeight - ScaleY(400)) <span style="color:#0000FF">div </span>2,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ScaleX(600), ScaleY(400));<br/>&nbsp;&nbsp;&nbsp;&nbsp;WebHWND_Browser := NewWebWnd(Form_Browser.Handle, 0, 0, Form_Browser.ClientWidth,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form_Browser.ClientHeight);<br/>&nbsp;&nbsp;&nbsp;&nbsp;SetWindowLong(Form_Browser.Handle, GWL_EXSTYLE, GetWindowLong(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebHWND_Browser, GWL_EXSTYLE) <span style="color:#0000FF">or </span>WS_EX_CLIENTEDGE);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn := TNewButton.Cr&#101;ate(Form_Browser);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.SetBounds(ScaleX(5), ScaleY(5), ScaleX(40), WizardForm.CancelButton.Height);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.Caption := <span style="color:#800080">&#39;&amp;Back&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.OnClick := @GoBackBtnOnClick;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.Parent := Form_Browser;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn := TNewButton.Cr&#101;ate(Form_Browser);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.SetBounds(ScaleX(47), ScaleY(5), ScaleX(55), WizardForm.CancelButton.Height);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.Caption := <span style="color:#800080">&#39;&amp;Forward&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.OnClick := @GoForwardBtnOnClick;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.Parent := Form_Browser;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn := TNewButton.Cr&#101;ate(Form_Browser);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.SetBounds(ScaleX(104), ScaleY(5), ScaleX(40), WizardForm.CancelButton.Height);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.Caption := <span style="color:#800080">&#39;&amp;Stop&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.OnClick := @StopBtnOnClick;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.Parent := Form_Browser;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn := TNewButton.Cr&#101;ate(Form_Browser);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.SetBounds(ScaleX(146), ScaleY(5), ScaleX(50), WizardForm.CancelButton.Height);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.Caption := <span style="color:#800080">&#39;&amp;Refresh&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.OnClick := @RefreshBtnOnClick;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.Parent := Form_Browser;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn := TNewButton.Cr&#101;ate(Form_Browser);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.SetBounds(ScaleX(198), ScaleY(5), ScaleX(40), WizardForm.CancelButton.Height);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.Caption := <span style="color:#800080">&#39;&amp;Home&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.OnClick := @HomeBtnOnClick;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Btn.Parent := Form_Browser;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;AddrEdit := TNewEdit.Cr&#101;ate(Form_Browser);<br/>&nbsp;&nbsp;&nbsp;&nbsp;AddrEdit.Left := ScaleX(240);<br/>&nbsp;&nbsp;&nbsp;&nbsp;AddrEdit.Top := ScaleY(6);<br/>&nbsp;&nbsp;&nbsp;&nbsp;AddrEdit.Parent := Form_Browser;<br/>&nbsp;&nbsp;&nbsp;&nbsp;AddrEdit.Text := <span style="color:#800080">&#39;about:blank&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;AddrEdit.OnKeyPress := @EditKeyPress;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;GoBtn := TNewButton.Cr&#101;ate(Form_Browser);<br/>&nbsp;&nbsp;&nbsp;&nbsp;GoBtn.Caption := <span style="color:#800080">&#39;&amp;Go&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;GoBtn.OnClick := @GoBtnOnClick;<br/>&nbsp;&nbsp;&nbsp;&nbsp;GoBtn.Parent := Form_Browser;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;BrowserFormResize(Form_Browser);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Form_Browser.OnResize := @BrowserFormResize;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Form_Browser.ActiveControl := AddrEdit;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Form_Browser.ShowModal();<br/>&nbsp;&nbsp;&nbsp;&nbsp;FreeWebWnd(WebHWND_Browser);<br/>&nbsp;&nbsp;<span style="color:#0000FF">finally<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Form_Browser.Free();<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span><strong>InitializeWizard</strong>();<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>State: DWord;<br/>&nbsp;&nbsp;s: <span style="color:#0000FF">string</span>;<br/>&nbsp;&nbsp;BrowserBtn: TNewButton;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>State := 0;<br/>&nbsp;&nbsp;s := <span style="color:#800080">&#39;&#39;</span>;<br/><span style="color:#008000">// 如果需要进行网址连接测试，取消下面代码的注释<br/>//&nbsp;&nbsp;s := &#39;<a href="http://www.google.cn" target="_blank">http://www.google.cn</a>&#39;;<br/><br/>&nbsp;&nbsp;</span><span style="color:#0000FF">if </span>CheckConnectState(s, State) <span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>MsgBox(<span style="color:#800080">&#39;网络已经连接。&#39;</span>, mbInformation, MB_OK)<br/>&nbsp;&nbsp;<span style="color:#0000FF">else<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>MsgBox(<span style="color:#800080">&#39;网络未连接。&#39;</span>, mbCriticalError, MB_OK);<br/>&nbsp;&nbsp;MsgBox(inttostr(State), mbInformation, MB_OK);<br/><br/>&nbsp;&nbsp;ExtractTemporaryFile(<span style="color:#800080">&#39;wizard.htm&#39;</span>);<br/>&nbsp;&nbsp;ExtractTemporaryFile(<span style="color:#800080">&#39;file.htm&#39;</span>);<br/>&nbsp;&nbsp;ExtractTemporaryFile(<span style="color:#800080">&#39;1.gif&#39;</span>);<br/>&nbsp;&nbsp;ExtractTemporaryFile(<span style="color:#800080">&#39;2.gif&#39;</span>);<br/>&nbsp;&nbsp;ExtractTemporaryFile(<span style="color:#800080">&#39;3.gif&#39;</span>);<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;WebHWND1 := NewWebWnd(WizardForm.WelcomePage.Handle, 0, 0, WizardForm.WizardBitmapImage.Width, WizardForm.WelcomePage.Height);<br/>&nbsp;&nbsp;DisplayHTMLPage(WebHWND1, ExpandConstant(<span style="color:#800080">&#39;{tmp}\wizard.htm&#39;</span>));<br/><br/>&nbsp;&nbsp;UrlPage := Cr&#101;ateCustomPage(wpWelcome, <span style="color:#800080">&#39;测试 Web 页面&#39;</span>, <span style="color:#800080">&#39;网址: <a href="http://www.google.cn" target="_blank">http://www.google.cn</a>&#39;</span>);<br/><br/>&nbsp;&nbsp;HtmlPage := Cr&#101;ateCustomPage(UrlPage.ID, <span style="color:#800080">&#39;测试 HTML文件 页面&#39;</span>, <span style="color:#800080">&#39;文件: file.htm&#39;</span>);<br/><br/>&nbsp;&nbsp;HtmlTextPage := Cr&#101;ateCustomPage(HtmlPage.ID, <span style="color:#800080">&#39;测试 HTML文本 页面&#39;</span>, <span style="color:#800080">&#39;临时自定义 HTML 字符串&#39;</span>);<br/><br/>&nbsp;&nbsp;BrowserBtn := TNewButton.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;BrowserBtn.Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width;<br/>&nbsp;&nbsp;BrowserBtn.Top := WizardForm.CancelButton.Top;<br/>&nbsp;&nbsp;BrowserBtn.Width := WizardForm.CancelButton.Width;<br/>&nbsp;&nbsp;BrowserBtn.Height := WizardForm.CancelButton.Height;<br/>&nbsp;&nbsp;BrowserBtn.Caption := <span style="color:#800080">&#39;&amp;Browser...&#39;</span>;<br/>&nbsp;&nbsp;BrowserBtn.OnClick := @WizardBtnOnClick;<br/>&nbsp;&nbsp;BrowserBtn.Parent := WizardForm;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span><strong>CurPageChanged</strong>(CurPageID: Integer);<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;if </span>CurPageID = wpWelcome <span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>WebWndSetParent(WebHWND1, WizardForm.WelcomePage.Handle)<br/>&nbsp;&nbsp;<span style="color:#0000FF">else<br/>&nbsp;&nbsp;if </span>CurPageID = wpFinished <span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>WebWndSetParent(WebHWND1, WizardForm.FinishedPage.Handle)<br/>&nbsp;&nbsp;<span style="color:#0000FF">else<br/>&nbsp;&nbsp;if </span>(CurPageID = UrlPage.ID) <span style="color:#0000FF">and </span>(WebHWND2 = 0) <span style="color:#0000FF">then<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>WebHWND2 := NewWebWnd(UrlPage.Surface.Handle, 0, 0, UrlPage.Surface.Width, UrlPage.Surface.Height);<br/>&nbsp;&nbsp;&nbsp;&nbsp;DisplayHTMLPage(WebHWND2, <span style="color:#800080">&#39;<a href="http://www.google.cn" target="_blank">http://www.google.cn</a>&#39;</span>)<br/>&nbsp;&nbsp;<span style="color:#0000FF">end else<br/>&nbsp;&nbsp;if </span>(CurPageID = HtmlPage.ID) <span style="color:#0000FF">and </span>(WebHWND3 = 0) <span style="color:#0000FF">then<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>WebHWND3 := NewWebWnd(HtmlPage.Surface.Handle, 0, 0, HtmlPage.Surface.Width, HtmlPage.Surface.Height);<br/>&nbsp;&nbsp;&nbsp;&nbsp;DisplayHTMLPage(WebHWND3, ExpandConstant(<span style="color:#800080">&#39;{tmp}\file.htm&#39;</span>));<br/>&nbsp;&nbsp;<span style="color:#0000FF">end<br/>&nbsp;&nbsp;else<br/>&nbsp;&nbsp;if </span>(CurPageID = HtmlTextPage.ID) <span style="color:#0000FF">and </span>(WebHWND4 = 0) <span style="color:#0000FF">then<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>WebHWND4 := NewWebWnd(HtmlTextPage.Surface.Handle, 0, 0, HtmlTextPage.Surface.Width, HtmlTextPage.Surface.Height);<br/>&nbsp;&nbsp;&nbsp;&nbsp;DisplayHTMLStr(WebHWND4, <span style="color:#800080">&#39;&lt;b&gt;I&#39;&#39;m a &lt;u&gt;HTML text&lt;/u&gt;&lt;/b&gt;&#39;</span>);<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><span style="color:#0000FF">end</span>;<br/></span></span></div></div><br/><strong>附图：</strong><br/><img src="http://restools.hanzify.org/inno/webctrl/aaa.gif" border="0" alt=""/><br/><br/><span style="color:Red">下载地址：</span><br/><span style="font-size:12pt"><strong><a target="_blank" href="http://restools.hanzify.org/inno/webctrl/inno_webctrl_v2.1.zip">http://restools.hanzify.org/inno/webctrl/inno_webctrl_v2.1.zip</a></strong></span><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://restools.hanzify.org/default.asp?id=90" /> 
	  <id>http://restools.hanzify.org/default.asp?id=90</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[ISSkinEx 3.0.0.2 for InnoSetup and NSIS (修改版本)]]></title>
	  <author>
		 <name>xin</name>
		 <uri>http://restools.hanzify.org/</uri>
		 <email>restools@21cn.com</email>
	  </author>
	  <category term="" scheme="http://restools.hanzify.org/default.asp?cateID=7" label="InnoSetup 使用技巧" /> 
	  <updated>2010-06-30T22:30:37+08:00</updated>
	  <published>2010-06-30T22:30:37+08:00</published>
		  <summary type="html"><![CDATA[<strong>.</strong><strong><span style="color:Red">VER 3.0.0.2 修正前一版本在某些情况下不能正常运行的问题。</span></strong><br/><br/><strong><span style="color:Blue">同一插件, 同时支持<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>和<a href="http://nsis.sourceforge.net" target="_blank"> NSIS </a>的脚本调用方式. 安装包中已经包含了相对应的<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>和<a href="http://nsis.sourceforge.net" target="_blank"> NSIS </a>的脚本例子.</span></strong><br/>这是一个修改版本的 ISSkin,主要针对增强版本的<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>而修改的,增加对新增控件的支持,包括以下在扩展版本的<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>中能够使用的控件:TButton, TEdit, TMemo, TNewProgressBar, TRichEditViewer, TRadioButton, TCheckBox, TComboBox, TNewGroupBox, TScrollBar, TNewProgressBar, TTrackBar, TTabControl, TTreeView, TListView, TListBox, TNewButton, TNewEdit, TNewMemo, TNewRadioButton, TNewCheckBox, TNewComboBox, TNewListBox, TNewCheckListBox, TFolderTreeView, TStartMenuFolderTreeView, THeaderControl, TUpDown, TStatusBar, TPasswordEdit, THotKey, TIPAddressEdit, TNewDateTimePicker, TNewMonthCalendar,TPageControl .<br/><img src="http://restools.hanzify.org/inno/ISSkinEx/snap.gif" border="0" alt=""/><br/><br/><strong><span style="color:Blue">for<a href="http://nsis.sourceforge.net" target="_blank"> NSIS </a>截图:</span></strong><br/><img src="http://restools.hanzify.org/inno/ISSkinEx/snap2.gif" border="0" alt=""/><br/><br/><strong>下载地址:</strong><br/><a href="http://restools.hanzify.org/inno/ISSkinEx/ISSkinEx3.0.0.2_for_InnoSetup_and_NSIS.exe" target="_blank">http://restools.hanzify.org/inno/ISSkinEx/ISSkinEx3.0.0.2_for_InnoSetup_and_NSIS.exe</a>]]></summary>
	  <link rel="alternate" type="text/html" href="http://restools.hanzify.org/default.asp?id=110" /> 
	  <id>http://restools.hanzify.org/default.asp?id=110</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[ISSkin 使用技巧,WinXP 下的窗口阴影]]></title>
	  <author>
		 <name>xin</name>
		 <uri>http://restools.hanzify.org/</uri>
		 <email>restools@21cn.com</email>
	  </author>
	  <category term="" scheme="http://restools.hanzify.org/default.asp?cateID=7" label="InnoSetup 使用技巧" /> 
	  <updated>2010-06-17T21:30:02+08:00</updated>
	  <published>2010-06-17T21:30:02+08:00</published>
		  <summary type="html"><![CDATA[是否觉得在使用 ISSkin 的时候感觉窗口太过平板,尤其对于那些窗口边缘和窗口内部颜色一致的皮肤尤其是这样,继续使用 Sakura 皮肤作为讲解,下图就是安装程序的截图,是否觉得就像一张纸一样,缺乏立体感呢?<br/><img src="http://restools.hanzify.org/inno/ISSkinSakura/s1.gif" border="0" alt=""/><br/><br/>作为 Vista 以上的 Windows 版本,我们都能够看见窗口的阴影,但是在 WinXP 里面却看不见,但是我们能看见的只有 Windows 提示的阴影.所以以下就是使用了 WinXP 的提示阴影效果,达至看上去窗口有一些立体的感觉.<br/><img src="http://restools.hanzify.org/inno/ISSkinSakura/s2.gif" border="0" alt=""/><br/><br/>脚本:<br/>下载地址:<br/><a href="http://restools.hanzify.org/inno/ISSkinSakura/ISSkinSakura.zip" target="_blank">http://restools.hanzify.org/inno/ISSkinSakura/ISSkinSakura.zip</a><br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://restools.hanzify.org/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用来自  ISSkinSakura.iss"/> 引用来自  ISSkinSakura.iss</div><div class="UBBContent"><span style="font-family:Courier New Ex"><span style="color:#000000"><span style="color:#008000">; 脚本编写: restools<br/>; 我的 BLOG: <a href="http://restools.hanzify.org" target="_blank">http://restools.hanzify.org</a><br/><br/></span><strong>[Setup]<br/></strong><span style="color:#0000FF">AppName</span>=ISSkin Example<br/><span style="color:#0000FF">AppVersion</span>=1.0<br/><span style="color:#0000FF">DefaultDirName</span>=<span style="color:#FF4040">{pf}</span>\ISSkin<br/><span style="color:#0000FF">SolidCompression</span>=true<br/><span style="color:#0000FF">WizardImageFile</span>=SakuraWizard.bmp<br/><span style="color:#0000FF">WizardSmallImageFile</span>=SakuraSmall.bmp<br/><span style="color:#0000FF">OutputDir</span>=.<br/><span style="color:#0000FF">OutputBaseFilename</span>=ISSkinSakura<br/><br/><strong>[Files]<br/></strong><span style="color:#008000">; Add the ISSkin DLL used for skinning<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>installations.<br/></span><span style="color:#0000FF">Source</span>: ISSkin.dll; <span style="color:#0000FF">DestDir</span>: <span style="color:#FF4040">{app}</span>; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy<br/><br/></span><span style="color:#008000">; Add the Visual Style resource contains resources used for skinning,<br/>; you can also use Microsoft Visual Styles (*.msstyles) resources.<br/></span><span style="color:#0000FF">Source</span>: Sakura.cjstyles; <span style="color:#0000FF">DestDir</span>: <span style="color:#FF4040">{tmp}</span>; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy<br/><br/></span><strong>[Code]<br/></strong><span style="color:#008000">// Importing LoadSkin API from ISSkin.DLL<br/></span><span style="color:#0000FF">procedure </span>LoadSkin(lpszPath: <span style="color:#0000FF">String</span>; lpszIniFileName: <span style="color:#0000FF">String</span>);<br/><span style="color:#0000FF">external </span><span style="color:#808000">&#39;LoadSkin@files:isskin.dll stdcall&#39;</span>;<br/><br/><span style="color:#008000">// Importing UnloadSkin API from ISSkin.DLL<br/></span><span style="color:#0000FF">procedure </span>UnloadSkin();<br/><span style="color:#0000FF">external </span><span style="color:#808000">&#39;UnloadSkin@files:isskin.dll stdcall&#39;</span>;<br/><br/><span style="color:#008000">// Importing ShowWindow Windows API from User32.DLL<br/></span><span style="color:#0000FF">function </span>ShowWindow(hWnd: Integer; uType: Integer): Integer;<br/><span style="color:#0000FF">external </span><span style="color:#808000">&#39;ShowWindow@user32.dll stdcall&#39;</span>;<br/><br/><span style="color:#0000FF">function </span>GetClassLong(Wnd: HWnd; Index: Integer): Longint;<br/><span style="color:#0000FF">external </span><span style="color:#808000">&#39;GetClassLongA@user32.dll stdcall&#39;</span>;<br/><span style="color:#0000FF">function </span>SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint;<br/><span style="color:#0000FF">external </span><span style="color:#808000">&#39;SetClassLongA@user32.dll stdcall&#39;</span>;<br/><br/><span style="color:#0000FF">function </span><strong>InitializeSetup</strong>(): Boolean;<br/><span style="color:#0000FF">begin<br/></span>&nbsp;&nbsp;ExtractTemporaryFile(<span style="color:#808000">&#39;Sakura.cjstyles&#39;</span>);<br/>&nbsp;&nbsp;LoadSkin(ExpandConstant(<span style="color:#808000">&#39;{tmp}\Sakura.cjstyles&#39;</span>), <span style="color:#808000">&#39;&#39;</span>);<br/>&nbsp;&nbsp;Result := True;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span><strong>DeinitializeSetup</strong>();<br/><span style="color:#0000FF">begin<br/></span>&nbsp;&nbsp;<span style="color:#008000">// Hide Window before unloading skin so user does not get<br/></span>&nbsp;&nbsp;<span style="color:#008000">// a glimse of an unskinned window before it is closed.<br/></span>&nbsp;&nbsp;ShowWindow(StrToInt(ExpandConstant(<span style="color:#808000">&#39;{wizardhwnd}&#39;</span>)), 0);<br/>&nbsp;&nbsp;UnloadSkin();<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">function </span>CheckWin32Version(AMajor: Integer; AMinor: Integer): Boolean;<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>WinVer: TWindowsVersion;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>GetWindowsVersionEx(WinVer);<br/>&nbsp;&nbsp;Result := (WinVer.Major &gt; AMajor) <span style="color:#0000FF">or<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>((WinVer.Major = AMajor) <span style="color:#0000FF">and<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(WinVer.Minor &gt;= AMinor));<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span><strong>InitializeWizard</strong>();<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>WizardForm.WizardBitmapImage.Height := WizardForm.WelcomePage.Height;<br/>&nbsp;&nbsp;<span style="color:#0000FF">if </span>CheckWin32Version(5, 1) <span style="color:#0000FF">and </span>(<span style="color:#0000FF">not </span>CheckWin32Version(6, 0)) <span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>SetClassLong(WizardForm.Handle, -26, GetClassLong(WizardForm.Handle, -26) + $20000);<br/><span style="color:#0000FF">end</span>;<br/></span></span></div></div><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://restools.hanzify.org/default.asp?id=109" /> 
	  <id>http://restools.hanzify.org/default.asp?id=109</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[ISSkin Pack 3.0 (含预览程序 ISSkinViewer)]]></title>
	  <author>
		 <name>xin</name>
		 <uri>http://restools.hanzify.org/</uri>
		 <email>restools@21cn.com</email>
	  </author>
	  <category term="" scheme="http://restools.hanzify.org/default.asp?cateID=7" label="InnoSetup 使用技巧" /> 
	  <updated>2010-06-17T00:58:10+08:00</updated>
	  <published>2010-06-17T00:58:10+08:00</published>
		  <summary type="html"><![CDATA[ 包含 250 款皮肤, 预览程序纯粹的由<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>脚本写成. 足以展示<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>脚本引擎的强大.<br/><br/>下载地址:<br/><a href="http://restools.hanzify.org/inno/ISSkinPack/ISSkinPack.exe" target="_blank">http://restools.hanzify.org/inno/ISSkinPack/ISSkinPack.exe</a><br/><br/>预览程序:<br/><img src="http://restools.hanzify.org/inno/ISSkinPack/snap.gif" border="0" alt=""/><br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://restools.hanzify.org/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用来自  ISSkinViewer.iss"/> 引用来自  ISSkinViewer.iss</div><div class="UBBContent"><span style="font-family:Courier New Ex"><span style="color:#000000"><span style="color:#FF0000">#ifndef IS_ENHANCED<br/>&nbsp;&nbsp;#error Enhanced edition of<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>(restools) is required to compile this script<br/>#endif<br/><br/></span><strong>[Setup]<br/></strong><span style="color:#0000FF">AppName</span>=ISSkinViewer<br/><span style="color:#0000FF">AppVersion</span>=1.0<br/><span style="color:#0000FF">SetupIconFile</span>=IViewer.ico<br/><span style="color:#0000FF">DefaultDirName</span>=<span style="color:#FF4040">{pf}</span>\ISSkinViewer<br/><span style="color:#0000FF">OutputBaseFilename</span>=ISSkinViewer<br/><span style="color:#0000FF">OutputDir</span>=.<br/><br/><strong>[Files]<br/></strong><span style="color:#0000FF">Source</span>: ISSkin.dll; <span style="color:#0000FF">DestDir</span>: <span style="color:#FF4040">{app}</span>; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy</span><br/><br/><strong>[Code]<br/></strong><span style="color:#0000FF">procedure </span>LoadSkin(lpszPath: <span style="color:#0000FF">String</span>; lpszIniFileName: <span style="color:#0000FF">String</span>); <span style="color:#0000FF">external </span><span style="color:#808000">&#39;LoadSkin@files:isskin.dll stdcall&#39;</span>;<br/><span style="color:#0000FF">procedure </span>UnloadSkin(); <span style="color:#0000FF">external </span><span style="color:#808000">&#39;UnloadSkin@files:isskin.dll stdcall&#39;</span>;<br/><span style="color:#0000FF">function </span>ShowWindow(hWnd: Integer; uType: Integer): Integer; <span style="color:#0000FF">external </span><span style="color:#808000">&#39;ShowWindow@user32.dll stdcall&#39;</span>;<br/><span style="color:#0000FF">function </span>LoadLibrary(lpLibFileName: <span style="color:#0000FF">String</span>): THandle; <span style="color:#0000FF">external </span><span style="color:#808000">&#39;LoadLibraryA@kernel32.dll stdcall&#39;</span>;<br/><span style="color:#0000FF">function </span>FreeLibrary(hLibModule: THandle): Boolean; <span style="color:#0000FF">external </span><span style="color:#808000">&#39;FreeLibrary@kernel32.dll stdcall&#39;</span>;<br/><span style="color:#0000FF">function </span>EnumResourceNames(hModule: THandle; lpType: <span style="color:#0000FF">String</span>; lpEnumFunc: Longword; lParam: Longint): BOOL; <span style="color:#0000FF">external </span><span style="color:#808000">&#39;EnumResourceNamesA@kernel32.dll stdcall&#39;</span>;<br/><span style="color:#0000FF">function </span>SetWindowText(hWnd: Longint; lpString: PChar): Longint; <span style="color:#0000FF">external </span><span style="color:#808000">&#39;SetWindowTextA@user32.dll&#39;</span>;<br/><span style="color:#0000FF">function </span>GetWindowLong(hWnd, nIndex: Integer): Longint; <span style="color:#0000FF">external </span><span style="color:#808000">&#39;GetWindowLongA@user32.dll&#39;</span>;<br/><br/><span style="color:#0000FF">procedure </span><strong>DeinitializeSetup</strong>();<br/><span style="color:#0000FF">begin<br/></span>&nbsp;&nbsp;ShowWindow(StrToInt(ExpandConstant(<span style="color:#808000">&#39;{wizardhwnd}&#39;</span>)), 0);<br/>&nbsp;&nbsp;UnloadSkin();<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>SkinFilePath: <span style="color:#0000FF">String</span>;<br/><br/><span style="color:#0000FF">procedure </span>BrowserBtn_OnClick(Sender: TObject); <span style="color:#0000FF">forward</span>;<br/><br/><span style="color:#0000FF">procedure </span>ISSkinFileCombo_OnChange(Sender: TObject); <span style="color:#0000FF">forward</span>;<br/><br/><span style="color:#0000FF">procedure </span>ISSkinIniCombo_OnChange(Sender: TObject); <span style="color:#0000FF">forward</span>;<br/><br/><span style="color:#0000FF">procedure </span>BlogBtn_OnClick(Sender: TObject);<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>Res: Integer;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>ShellExec(<span style="color:#808000">&#39;open&#39;</span>, <span style="color:#808000">&#39;<a href="http://restools.hanzify.org" target="_blank">http://restools.hanzify.org</a>&#39;</span>,<span style="color:#808000">&#39;&#39;</span>,<span style="color:#808000">&#39;&#39;</span>, SW_SHOW, ewNoWait, Res);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#008000">{ RedesignWizardFormBegin } // 不要删除这一行代码。<br/>// 不要修改这一段代码，它是自动生成的。<br/></span><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>Panel1: TPanel;<br/>&nbsp;&nbsp;Label1: TLabel;<br/>&nbsp;&nbsp;Label2: TLabel;<br/>&nbsp;&nbsp;Bevel2: TBevel;<br/>&nbsp;&nbsp;Label3: TLabel;<br/>&nbsp;&nbsp;BitmapImage1: TBitmapImage;<br/>&nbsp;&nbsp;Label4: TLabel;<br/>&nbsp;&nbsp;ISSkinFileCombo: TNewComboBox;<br/>&nbsp;&nbsp;ISSkinIniCombo: TNewComboBox;<br/>&nbsp;&nbsp;NewEdit1: TNewEdit;<br/>&nbsp;&nbsp;NewMemo1: TNewMemo;<br/>&nbsp;&nbsp;NewCheckBox1: TNewCheckBox;<br/>&nbsp;&nbsp;NewRadioButton1: TNewRadioButton;<br/>&nbsp;&nbsp;NewListBox1: TNewListBox;<br/>&nbsp;&nbsp;Panel2: TPanel;<br/>&nbsp;&nbsp;PasswordEdit1: TPasswordEdit;<br/>&nbsp;&nbsp;NewCheckListBox1: TNewCheckListBox;<br/>&nbsp;&nbsp;NewStaticText1: TNewStaticText;<br/>&nbsp;&nbsp;FolderTreeView1: TFolderTreeView;<br/>&nbsp;&nbsp;RichEditViewer1: TRichEditViewer;<br/>&nbsp;&nbsp;NewProgressBar1: TNewProgressBar;<br/>&nbsp;&nbsp;NewComboBox1: TNewComboBox;<br/>&nbsp;&nbsp;StartMenuFolderTreeView1: TStartMenuFolderTreeView;<br/>&nbsp;&nbsp;BrowserBtn: TNewButton;<br/>&nbsp;&nbsp;BlogBtn: TNewButton;<br/><br/><span style="color:#0000FF">procedure </span>RedesignWizardForm;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;with </span>WizardForm <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Caption := <span style="color:#808000">&#39;ISSKIN 皮肤预览程序 Ver1.0&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ShowHint := True;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ Panel1 }<br/>&nbsp;&nbsp;</span>Panel1 := TPanel.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>Panel1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;Panel1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := WizardForm.WelcomePage;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(497);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(313);<br/>&nbsp;&nbsp;&nbsp;&nbsp;BevelOuter := bvNone;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#808000">&#39; &#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ParentBackground := False;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ Label1 }<br/>&nbsp;&nbsp;</span>Label1 := TLabel.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>Label1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;Label1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#808000">&#39;皮肤文件:&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Transparent := False;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(16);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(8);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(51);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(13);<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ Label2 }<br/>&nbsp;&nbsp;</span>Label2 := TLabel.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>Label2 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;Label2&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#808000">&#39;皮肤 INI 参数:&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Transparent := False;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(288);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(8);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(71);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(13);<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ Bevel2 }<br/>&nbsp;&nbsp;</span>Bevel2 := TBevel.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>Bevel2 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;Bevel2&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(7);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(72);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(482);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(229);<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ Label3 }<br/>&nbsp;&nbsp;</span>Label3 := TLabel.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>Label3 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;Label3&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#808000">&#39;Inno Setup 支持的控件:&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Transparent := False;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(16);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(53);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(118);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(13);<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ BitmapImage1 }<br/>&nbsp;&nbsp;</span>BitmapImage1 := TBitmapImage.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>BitmapImage1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;BitmapImage1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(288);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(80);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(185);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(29);<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ Label4 }<br/>&nbsp;&nbsp;</span>Label4 := TLabel.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>Label4 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;Label4&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TLabel&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#808000">&#39;Label4&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Transparent := False;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(144);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(80);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(32);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(13);<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ ISSkinFileCombo }<br/>&nbsp;&nbsp;</span>ISSkinFileCombo := TNewComboBox.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>ISSkinFileCombo <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;ISSkinFileCombo&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(16);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(24);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(229);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(21);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Style := csDro&#112;DownList;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dro&#112;DownCount := 16;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ ISSkinIniCombo }<br/>&nbsp;&nbsp;</span>ISSkinIniCombo := TNewComboBox.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>ISSkinIniCombo <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;ISSkinIniCombo&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(288);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(24);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(193);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(21);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Style := csDro&#112;DownList;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ NewEdit1 }<br/>&nbsp;&nbsp;</span>NewEdit1 := TNewEdit.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>NewEdit1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;NewEdit1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(16);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(104);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(105);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(21);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TNewEdit&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Text := <span style="color:#808000">&#39;NewEdit1&#39;</span>;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ NewMemo1 }<br/>&nbsp;&nbsp;</span>NewMemo1 := TNewMemo.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>NewMemo1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;NewMemo1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(16);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(128);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(105);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(89);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TNewMemo&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Lines.Text := <span style="color:#808000">&#39;NewMemo1&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 2&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 3&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 4&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 5&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 6&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 7&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 8&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 9&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 10&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 11&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 12&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 13&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ScrollBars := ssBoth;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ NewCheckBox1 }<br/>&nbsp;&nbsp;</span>NewCheckBox1 := TNewCheckBox.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>NewCheckBox1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;NewCheckBox1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(16);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(248);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(97);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(17);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TNewCheckBox&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#808000">&#39;NewCheckBox1&#39;</span>;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ NewRadioButton1 }<br/>&nbsp;&nbsp;</span>NewRadioButton1 := TNewRadioButton.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>NewRadioButton1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;NewRadioButton1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(16);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(272);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(113);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(17);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TNewRadioButton&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#808000">&#39;NewRadioButton1&#39;</span>;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ NewListBox1 }<br/>&nbsp;&nbsp;</span>NewListBox1 := TNewListBox.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>NewListBox1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;NewListBox1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(127);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(120);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(85);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(81);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TNewListBox&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Items.Text := <span style="color:#808000">&#39;Line 2&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 3&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 4&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 5&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 6&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 7&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 8&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 9&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 10&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 11&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 12&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 13&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ItemIndex := -1;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ Panel2 }<br/>&nbsp;&nbsp;</span>Panel2 := TPanel.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>Panel2 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;Panel2&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(127);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(224);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(85);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(41);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TPanel&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#808000">&#39;Panel2&#39;</span>;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ PasswordEdit1 }<br/>&nbsp;&nbsp;</span>PasswordEdit1 := TPasswordEdit.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>PasswordEdit1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;PasswordEdit1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(127);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(272);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(85);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(21);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TPasswordEdit&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Text := <span style="color:#808000">&#39;PasswordEdit1&#39;</span>;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ NewCheckListBox1 }<br/>&nbsp;&nbsp;</span>NewCheckListBox1 := TNewCheckListBox.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>NewCheckListBox1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;NewCheckListBox1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(224);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(120);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(145);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(81);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TNewCheckListBox&#39;</span>;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ NewStaticText1 }<br/>&nbsp;&nbsp;</span>NewStaticText1 := TNewStaticText.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>NewStaticText1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;NewStaticText1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TNewStaticText&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#808000">&#39;NewStaticText1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(144);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(95);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(77);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(14);<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ FolderTreeView1 }<br/>&nbsp;&nbsp;</span>FolderTreeView1 := TFolderTreeView.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>FolderTreeView1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;FolderTreeView1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(224);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(204);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(145);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(89);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Cursor := crArrow;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TFolderTreeView&#39;</span>;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ RichEditViewer1 }<br/>&nbsp;&nbsp;</span>RichEditViewer1 := TRichEditViewer.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>RichEditViewer1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;RichEditViewer1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(376);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(120);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(105);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(81);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TRichEditViewer&#39;</span>;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ NewProgressBar1 }<br/>&nbsp;&nbsp;</span>NewProgressBar1 := TNewProgressBar.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>NewProgressBar1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;NewProgressBar1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(16);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(224);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(105);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(17);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TNewProgressBar&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Min := 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Max := 100;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Position := 70;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ NewComboBox1 }<br/>&nbsp;&nbsp;</span>NewComboBox1 := TNewComboBox.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>NewComboBox1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;NewComboBox1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(16);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(80);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(105);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(21);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TNewComboBox&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Items.Text := <span style="color:#808000">&#39;Line 2&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 3&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 4&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 5&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 6&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 7&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 8&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 9&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 10&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 11&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 12&#39; </span>+ #13#10 +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#808000">&#39;Line 13&#39;</span>;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ StartMenuFolderTreeView1 }<br/>&nbsp;&nbsp;</span>StartMenuFolderTreeView1 := TStartMenuFolderTreeView.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>StartMenuFolderTreeView1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;StartMenuFolderTreeView1&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(376);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(204);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(105);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(89);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Cursor := crArrow;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;TStartMenuFolderTreeView&#39;</span>;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ BrowserBtn }<br/>&nbsp;&nbsp;</span>BrowserBtn := TNewButton.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>BrowserBtn <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;BrowserBtn&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := Panel1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(248);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(22);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(35);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(25);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#808000">&#39;目录&#39;</span>;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;ISSkinFileCombo.TabOrder := 0;<br/>&nbsp;&nbsp;ISSkinIniCombo.TabOrder := 1;<br/>&nbsp;&nbsp;NewEdit1.TabOrder := 2;<br/>&nbsp;&nbsp;NewMemo1.TabOrder := 3;<br/>&nbsp;&nbsp;NewCheckBox1.TabOrder := 4;<br/>&nbsp;&nbsp;NewRadioButton1.TabOrder := 5;<br/>&nbsp;&nbsp;NewListBox1.TabOrder := 6;<br/>&nbsp;&nbsp;Panel2.TabOrder := 7;<br/>&nbsp;&nbsp;PasswordEdit1.TabOrder := 8;<br/>&nbsp;&nbsp;NewCheckListBox1.TabOrder := 9;<br/>&nbsp;&nbsp;NewStaticText1.TabOrder := 10;<br/>&nbsp;&nbsp;FolderTreeView1.TabOrder := 11;<br/>&nbsp;&nbsp;RichEditViewer1.TabOrder := 12;<br/>&nbsp;&nbsp;NewProgressBar1.TabOrder := 13;<br/>&nbsp;&nbsp;NewComboBox1.TabOrder := 14;<br/>&nbsp;&nbsp;StartMenuFolderTreeView1.TabOrder := 15;<br/>&nbsp;&nbsp;BrowserBtn.TabOrder := 16;<br/><br/>&nbsp;&nbsp;Panel1.TabOrder := 2;<br/><br/>&nbsp;&nbsp;<span style="color:#008000">{ BlogBtn }<br/>&nbsp;&nbsp;</span>BlogBtn := TNewButton.Cr&#101;ate(WizardForm);<br/>&nbsp;&nbsp;<span style="color:#0000FF">with </span>BlogBtn <span style="color:#0000FF">do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>Name := <span style="color:#808000">&#39;BlogBtn&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Parent := WizardForm;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := ScaleX(20);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := ScaleY(327);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Width := ScaleX(107);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Height := ScaleY(23);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Hint := <span style="color:#808000">&#39;访问我的 BLOG&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Caption := <span style="color:#808000">&#39;RESTOOLS&#39;&#39; BLOG&#39;</span>;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;BlogBtn.TabOrder := 5;<br/><br/><span style="color:#008000">{ ReservationBegin }<br/>&nbsp;&nbsp;// 这一部分是提供给你的，你可以在这里输入一些补充代码。<br/>&nbsp;&nbsp;</span>NewCheckListBox1.AddCheckBox(<span style="color:#808000">&#39;TNewCheckListBox&#39;</span>, <span style="color:#808000">&#39;&#39;</span>, 0, True, True, False, True, <span style="color:#0000FF">nil</span>);<br/>&nbsp;&nbsp;NewCheckListBox1.AddRadioButton(<span style="color:#808000">&#39;TNewCheckListBox&#39;</span>, <span style="color:#808000">&#39;&#39;</span>, 1, True, True, <span style="color:#0000FF">nil</span>);<br/>&nbsp;&nbsp;NewCheckListBox1.AddRadioButton(<span style="color:#808000">&#39;TNewCheckListBox&#39;</span>, <span style="color:#808000">&#39;&#39;</span>, 1, False, True, <span style="color:#0000FF">nil</span>);<br/>&nbsp;&nbsp;NewCheckListBox1.AddCheckBox(<span style="color:#808000">&#39;TNewCheckListBox&#39;</span>, <span style="color:#808000">&#39;&#39;</span>, 0, True, True, False, True, <span style="color:#0000FF">nil</span>);<br/>&nbsp;&nbsp;BrowserBtn.OnClick := @BrowserBtn_OnClick;<br/>&nbsp;&nbsp;ISSkinFileCombo.OnChange := @ISSkinFileCombo_OnChange;<br/>&nbsp;&nbsp;ISSkinIniCombo.OnChange := @ISSkinIniCombo_OnChange;<br/>&nbsp;&nbsp;BlogBtn.OnClick := @BlogBtn_OnClick;<br/><span style="color:#008000">{ ReservationEnd }<br/></span><span style="color:#0000FF">end</span>;<br/><span style="color:#008000">// 不要修改这一段代码，它是自动生成的。<br/>{ RedesignWizardFormEnd } // 不要删除这一行代码。<br/><br/></span><span style="color:#0000FF">function </span>EnumResName(hModule: THandle; lpType, lpName: <span style="color:#0000FF">String</span>; lParam: Longint): Boolean;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>ISSkinIniCombo.Items.Append(lpName);<br/>&nbsp;&nbsp;Result := True;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>ISSkinIniCombo_OnChange(Sender: TObject);<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>SkinFile, SkinIni: <span style="color:#0000FF">String</span>;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;try<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>SkinFile := <span style="color:#808000">&#39;&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;SkinIni := <span style="color:#808000">&#39;&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">if </span>ISSkinFileCombo.Items[ISSkinFileCombo.ItemIndex] &lt;&gt; <span style="color:#808000">&#39;&#39; </span><span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>SkinFile := SkinFilePath+<span style="color:#808000">&#39;\&#39;</span>+ISSkinFileCombo.Items[ISSkinFileCombo.ItemIndex];<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">if </span>ISSkinIniCombo.Items[ISSkinIniCombo.ItemIndex] &lt;&gt; <span style="color:#808000">&#39;&#39; </span><span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>SkinIni := ISSkinIniCombo.Items[ISSkinIniCombo.ItemIndex];<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;LoadSkin(SkinFile, SkinIni);<br/>&nbsp;&nbsp;<span style="color:#0000FF">except<br/>&nbsp;&nbsp;end</span>;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>ISSkinFileCombo_OnChange(Sender: TObject);<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>hSkin: THandle;<br/>&nbsp;&nbsp;i, DelIndex: Integer;<br/>&nbsp;&nbsp;S, SkinFile, SkinIni: <span style="color:#0000FF">String</span>;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;try<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>hSkin:=LoadLibrary(SkinFilePath+<span style="color:#808000">&#39;\&#39;</span>+ISSkinFileCombo.Items[ISSkinFileCombo.ItemIndex]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">try<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>ISSkinIniCombo.Items.Clear;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnumResourceNames(hSkin, <span style="color:#808000">&#39;TEXTFILE&#39;</span>, CallbackAddr(<span style="color:#808000">&#39;EnumResName&#39;</span>), 0);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DelIndex := -1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">for </span>i := 0 <span style="color:#0000FF">to </span>ISSkinIniCombo.Items.Count - 1 <span style="color:#0000FF">do<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>S := ISSkinIniCombo.Items[<span style="color:black">i</span>];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">if </span>CompareText(S, <span style="color:#808000">&#39;THEMES_INI&#39;</span>)=0 <span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>DelIndex := i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringChange(S, <span style="color:#808000">&#39;_&#39;</span>, <span style="color:#808000">&#39;.&#39;</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISSkinIniCombo.Items[<span style="color:black">i</span>] := S;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">if </span>DelIndex &gt;= 0 <span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>ISSkinIniCombo.Items.Del&#101;te(DelIndex);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">if </span>ISSkinIniCombo.Items.Count &gt;= 0 <span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>ISSkinIniCombo.ItemIndex := ISSkinIniCombo.Items.Count - 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">finally<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>FreeLibrary(hSkin);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;SkinFile := <span style="color:#808000">&#39;&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;SkinIni := <span style="color:#808000">&#39;&#39;</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">if </span>ISSkinFileCombo.Items[ISSkinFileCombo.ItemIndex] &lt;&gt; <span style="color:#808000">&#39;&#39; </span><span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>SkinFile := SkinFilePath+<span style="color:#808000">&#39;\&#39;</span>+ISSkinFileCombo.Items[ISSkinFileCombo.ItemIndex];<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">if </span>ISSkinIniCombo.Items[ISSkinIniCombo.ItemIndex] &lt;&gt; <span style="color:#808000">&#39;&#39; </span><span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>SkinIni := ISSkinIniCombo.Items[ISSkinIniCombo.ItemIndex];<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;LoadSkin(SkinFile, SkinIni);<br/>&nbsp;&nbsp;<span style="color:#0000FF">except<br/>&nbsp;&nbsp;end</span>;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>FindSkinFile();<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>FindRec: TFindRec;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>ISSkinFileCombo.Items.Clear;<br/>&nbsp;&nbsp;<span style="color:#0000FF">if </span>FindFirst(SkinFilePath+<span style="color:#808000">&#39;\*.cjstyles&#39;</span>, FindRec) <span style="color:#0000FF">then begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;try<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;repeat<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if </span>FindRec.Attributes <span style="color:#0000FF">and </span>FILE_ATTRIBUTE_DIRECTORY = 0 <span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>ISSkinFileCombo.Items.Append(FindRec.Name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">until not </span>FindNext(FindRec);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">finally<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>FindClose(FindRec);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span>BrowserBtn_OnClick(Sender: TObject);<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;if </span>BrowseForFolder(<span style="color:#808000">&#39;请选择 ISSkin 皮肤所在路径:&#39;</span>, SkinFilePath, False) <span style="color:#0000FF">then<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>FindSkinFile();<br/>&nbsp;&nbsp;&nbsp;&nbsp;UnloadSkin;<br/>&nbsp;&nbsp;<span style="color:#0000FF">end</span>;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">function </span><strong>InitializeSetup</strong>(): Boolean;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;if </span>SkinFilePath=<span style="color:#808000">&#39;&#39; </span><span style="color:#0000FF">then<br/>&nbsp;&nbsp;&nbsp;&nbsp;</span>SkinFilePath := ExtractFileDir(ExpandConstant(<span style="color:#808000">&#39;{srcexe}&#39;</span>))+<span style="color:#808000">&#39;\Styles&#39;</span>;<br/>&nbsp;&nbsp;LoadSkin(<span style="color:#808000">&#39;&#39;</span>, <span style="color:#808000">&#39;&#39;</span>);<br/>&nbsp;&nbsp;Result := True;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span><strong>InitializeWizard</strong>();<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>RedesignWizardForm;<br/>&nbsp;&nbsp;FindSkinFile();<br/>&nbsp;&nbsp;ISSkinFileCombo.Sorted := True;<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">Procedure </span>SetAppTitle(Value: <span style="color:#0000FF">String</span>);<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>n: HWND;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>n:=GetWindowLong(MainForm.Handle, -8);<br/>&nbsp;&nbsp;<span style="color:#0000FF">if </span>n &lt;&gt; 0 <span style="color:#0000FF">then </span>SetWindowText(n, PChar(Value));<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span><strong>CurPageChanged</strong>(CurPageID: Integer);<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>WizardForm.NextButton.Hide;<br/>&nbsp;&nbsp;WizardForm.CancelButton.Caption := <span style="color:#808000">&#39;关闭&#39;</span>;<br/>&nbsp;&nbsp;SetAppTitle(<span style="color:#808000">&#39;ISSKIN 皮肤预览程序&#39;</span>);<br/><span style="color:#0000FF">end</span>;<br/><br/></span></span></div></div><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://restools.hanzify.org/default.asp?id=108" /> 
	  <id>http://restools.hanzify.org/default.asp?id=108</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Inno Setup 插件 CallbackCtrl V1.1 (回调函数插件)]]></title>
	  <author>
		 <name>xin</name>
		 <uri>http://restools.hanzify.org/</uri>
		 <email>restools@21cn.com</email>
	  </author>
	  <category term="" scheme="http://restools.hanzify.org/default.asp?cateID=7" label="InnoSetup 使用技巧" /> 
	  <updated>2010-02-27T13:30:57+08:00</updated>
	  <published>2010-02-27T13:30:57+08:00</published>
		  <summary type="html"><![CDATA[<span style="color:Blue">用 VC 重现 InnoCallback 的功能。</span><br/><br/><span style="color:Red"> Version 1.1<br/> 修正在某些 Windows 平台(例如: Windows XP SP3)出现不能正常运行的问题。</span><br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://restools.hanzify.org/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用来自  test1.iss "/> 引用来自  test1.iss </div><div class="UBBContent"><span style="font-family:Courier New"><span style="color:#000000"><span style="color:#008000">; -- test.iss --<br/>; restools<br/>; <a href="http://restools.hanzify.org" target="_blank">http://restools.hanzify.org</a><br/>; 时间仓促，如有错误请到我的 BLOG 咨询<br/>; CallbackCtrl.dll 为一个用于<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>的 4 KB 的回调( Callback )函数插件。<br/>; 跟 InnoCallback 插件功能完全一样，但是由于它是用 VC 重现功能，所以仅仅只有 4 KB 就足以完成回调函数的处理。<br/>; 同样的功能，将会在后续的<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>增强版中直接提供回调函数的支持，<br/>; 也就是说无须任何插件就可以在脚本中处理回调函数。<br/>; 这个插件只是提供给那些使用普通版本<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>的用户使用。<br/><br/>;<a href="http://www.jrsoftware.org/isinfo.php" target="_blank"> Inno Setup </a>plugin - CallbackCtrl ( 4 KB )<br/>; Copyright (C)<a href="http://restools.hanzify.org" target="_blank"> restools </a>2009<br/>; Version 1.1<br/><br/></span><strong>[Setup]<br/></strong><span style="color:#0000FF">AppName</span>=My Application<br/><span style="color:#0000FF">AppVerName</span>=My Application Ver 1.5<br/><span style="color:#0000FF">DefaultDirName</span>=<span style="color:#FF4040">{pf}</span>\My Application<br/><span style="color:#0000FF">SolidCompression</span>=yes<br/><span style="color:#0000FF">Compression</span>=lzma/ultra&nbsp;&nbsp;<br/><br/><strong>[Files]<br/></strong><span style="color:#0000FF">Source</span>: CallbackCtrl.dll; <span style="color:#0000FF">DestDir</span>: <span style="color:#FF4040">{tmp}</span>; <span style="color:#0000FF">Flags</span>: <span style="color:#802020">dontcopy<br/><br/></span><strong>[code]<br/></strong><span style="color:#0000FF">type<br/> </span>TTimerProc=<span style="color:#0000FF">procedure</span>(h:longword; msg:longword; idevent:longword; dwTime:longword);<br/><br/><span style="color:#0000FF">function </span>WrapTimerProc(callback:TTimerProc; paramcount:integer):longword;<br/>&nbsp;&nbsp;<span style="color:#0000FF">external </span><span style="color:#808000">&#39;wrapcallbackaddr@files:callbackctrl.dll stdcall&#39;</span>;<br/><br/><span style="color:#0000FF">function </span>SetTimer(hWnd: longword; nIDEvent, uElapse: longword; lpTimerFunc: longword): longword;<br/>&nbsp;&nbsp;<span style="color:#0000FF">external </span><span style="color:#808000">&#39;SetTimer@user32.dll stdcall&#39;</span>;<br/><br/><span style="color:#0000FF">procedure </span>mytimerproc(h:longword; msg:longword; idevent:longword; dwTime:longword);<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>WizardForm.WelcomePage.Color:=random($FFFFFF);<br/><span style="color:#0000FF">end</span>;<br/><br/><span style="color:#0000FF">procedure </span><strong>InitializeWizard</strong>();<br/><span style="color:#0000FF">var<br/>&nbsp;&nbsp;</span>timercallback: Longword;<br/><span style="color:#0000FF">begin<br/>&nbsp;&nbsp;</span>timercallback := WrapTimerProc(@mytimerproc,4); <br/>&nbsp;&nbsp;settimer(0,0,1000,timercallback); <br/><span style="color:#0000FF">end</span>;<br/><br/></span></span></div></div><br/><br/>点击下面连接下载例子。<br/><span style="font-size:14pt"><a target="_blank" href="http://restools.hanzify.org/inno/callbackctrl/InnoCallbackCtrl_V1.1.zip">http://restools.hanzify.org/inno/callbackctrl/InnoCallbackCtrl_V1.1.zip</a></span>]]></summary>
	  <link rel="alternate" type="text/html" href="http://restools.hanzify.org/default.asp?id=101" /> 
	  <id>http://restools.hanzify.org/default.asp?id=101</id> 
  </entry>	
		
</feed>
