Inno自定义界面学习笔记(四)之自定义按钮
上一篇讲了如何替换背景图片,这一篇讲讲如何绘制自定义按钮。
可以看到背景图被替换后,按钮的风格却是格格不入。
我们希望效果图是这样的。首先增加一键安装按钮
添加安装按钮
先在var区添加按钮变量的声明
button_setup_or_next :hwnd;//安装/下一步按钮 button
并且在Fils区和 extract_temp_files 过程中分别加载和释放图片资源
[Files]
Source: ".\{tmp}\button_setup_or_next.png"; DestDir: "{tmp}"; Flags: dontcopy solidbreak; Attribs: hidden system
[Code]
//释放需要的临时资源文件
procedure extract_temp_files();
begin
...
ExtractTemporaryFile('button_setup_or_next.png');
...
end;
然后在 InitializeWizard 中对控件初始化
//函数声明:
//重载安装程序初始化函数(和上边那个不一样),进行初始化操作
procedure InitializeWizard();
begin
...
//安装或下一步初始化
button_setup_or_next := BtnCreate(WizardForm.Handle, ScaleX(211), ScaleY(305), ScaleX(178), ScaleY(43), ExpandConstant('{tmp}\button_setup_or_next.png'), 0, False);
//BtnSetEvent(button_setup_or_next, ID_BUTTON_ON_CLICK_EVENT, WrapBtnCallback(@button_setup_or_next_on_click, 1));
...
end;
BtnCreate 的作用是将按钮 初始化到{x,y}={211,305} {宽,高}={178,43}的位置,并且加载图片资源 button_setup_or_next.png
图片资源中已经包括了按钮的四态(正常,悬浮,点击,失效),配合BtnCreate我们就不用再额外管理按钮的状态了。
添加按钮的回调函数
现在我们点击一键安装按钮是没响应的。我们需要使用BtnSetEvent来设置按钮的回调函数。
但在此之前,我们还要添加一些变量和类型
在常量区添加 ID_BUTTON_ON_CLICK_EVENT 的定义和TBtnEventProc的定义
[Code]
type
TBtnEventProc = procedure(h : hwnd);
const
ID_BUTTON_ON_CLICK_EVENT = 1;
这些定义应该是bovta中要求的数据结构,本文对此不展开。有兴趣的请自行搜索。
然后在api声明区中声明WrapBtnCallback
function WrapBtnCallback(Callback : TBtnEventProc; ParamCount : integer) : longword; external 'wrapcallback@files:innocallback.dll stdcall delayload';
最后定义回调函数
//主界面安装按钮按下时的回调函数
procedure button_setup_or_next_on_click(hBtn : hwnd);
begin
WizardForm.NextButton.OnClick(WizardForm);
end;
类似的将自定义安装按钮和协议同意按钮添加好后的效果:
全篇的脚本资源已上传到csdn,可以自行下载研究: