inno setup自带的安装界面太老套了,如何实现类似网易,微信那种带界面的安装?一般有两种思路:提供一个单独的下载器,然后通过下载器将你用innosetup 打包后的软件下载下来,然后,静默安装这个包;另外一个,就是将自带的安装界面全部隐藏掉,通过在pascal下利用botva2.dll和innocallback.dll两个文件定制安装界面。网上有很多讲述如何制作安装界面的,但很少有例子实现边框和阴影的,下面我说下我实现的方案。
一.窗口支持边框
要使窗口支持边框,第一种方案就是背景用一张带边框的图片。当然,这种方法能实现,不是我想表达的。另外一种方案:用TPanel 贴图,然后窗口留白,窗口的背景颜色设置为边框设置的颜色。下面是主窗口WizardForm和背景留白控件TPanel的关键代码:
WIZARDFORM_BORDER_WIDTH 设置为边框的宽度
// 初始化主窗口
with WizardForm do
begin
BorderStyle := bsNone;
Position := poScreenCenter;
Width := WIZARDFORM_WIDTH_NORMAL;
Height := WIZARDFORM_HEIGHT_NORMAL;
Color := $FFc7c7c7;
NextButton.Height := 0;
CancelButton.Height := 0;
BackButton.Visible := FALSE;
end;
// 初始化主窗口背景
mainBkPanel := TPanel.Create(WizardForm);
mainBkPanel.Parent := WizardForm;
mainBkPanel.ParentBackground := True;
mainBkPanel.Top := WIZARDFORM_BORDER_WIDTH;
mainBkPanel.Left := WIZARDFORM_BORDER_WIDTH;
mainBkPanel.BorderStyle := bsNone
mainBkPanel.Width := WIZARDFORM_WIDTH_NORMAL - WIZARDFORM_BORDER_WIDTH * 2;
mainBkPanel.Height := WIZARDFORM_HEIGHT_NORMAL - WIZARDFORM_BORDER_WIDTH * 2;
mainBkPanel.BevelKind := bkNone;
mainBkPanel.BevelInner := bvNone;
mainBkPanel.BevelOuter := bvNone;
mainBkPanel.Visible := True;
二.窗口支持圆角阴影
这个就简单点了,让UI设计一张带有圆角阴影的图片,然后,参照我上面设置边框的步骤,将宽度设置为0,将主窗口的WizardForm的Color设置为$00FFFFFF就完成了。但是,由于我们使用的是botva2.dll这个库,你会发现如果多次ImgLoad图片,窗口阴影会变的越来越深,这是由于,窗口句柄会随着你每次多load一次图片,背景图片会多贴一次,导致阴影加深了。还好这个库有一个图片释放接口ImgRelease,因此,你每次调用load之前调用release即可解决这个问题。
下面是关键代码:
ImgRelease(image_wizardform_background);
image_wizardform_background := ImgLoad(mainBkPanel.Handle, ExpandConstant('{tmp}\bk_white1.png'), 0, 0, WIZARDFORM_WIDTH_NORMAL, WIZARDFORM_HEIGHT_NORMAL, FALSE, TRUE);
ImgApplyChanges(mainBkPanel.Handle);
ImgApplyChanges(WizardForm.Handle);