作者: Jim Wang 公众号: 巴博萨船长

摘要:Inno Setup 使用过程中,如何窗口自定义输入路径的引导页面?如何在自定义页面中添加控件和控件的事件处理函数?如何在页面中使用添加图形文件?

Abstract: How to use Inno Setup and how to create a custom input path for the window guide page? How to add controls to a custom page and event handling functions for the controls? How to use add graphics files to a page?

作者: Jim Wang 公众号: 巴博萨船长

Inno Setup 如何创建自定义的路径输入页面

实现过程

如需要创建CreateInputDirPage,需要在[Setup]字段完成如下设定:

1
2
[Setup]
ArchitecturesInstallIn64BitMode = x64

如果 ArchitecturesInstallIn64BitMode 不被设定,则CreateInputDirPage页面的Caption值和默认路径值DatabaseDirPage.Values 都不会被接受。

img

然后修改过程InitializeWizard,修改完代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
procedure InitializeWizard;
var
Index: Integer;
Offset: Integer;
BitmapImage: TBitmapImage;
BitmapImage2: TBitmapImage;
sOldDBPath: String;
begin
ExtractTemporaryFile('DatabaseIcon225x225.bmp');
DatabaseDirPage := CreateInputDirPage(wpSelectDir,
'Page Caption',
'',
'Page Sub Caption',
False,
'New path');
Index := DatabaseDirPage.Add(CustomMessage('InPageEditLabel'));
sOldPath := GetOldSettingPath();
If sOldPath = '' then
begin
DatabaseDirPage.Values[0] := ExpandConstant('{commonappdata}\{#AppPath}\DB\');
end
else
begin
// Set initial value (optional)
DatabaseDirPage.Values[0] := sOldDBPath;
End;
DatabaseDirPage.Edits[Index].Enabled := False;
DatabaseDirPage.Buttons[Index].Enabled := False;
DatabaseDirPage.Buttons[0].OnClick := @DirBrowseButtonClick;

// add an icon in database dir page before sub caption label
BitmapImage2 := TBitmapImage.Create(WizardForm);
with BitmapImage2 do
begin
Parent := DatabaseDirPage.Surface;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\DatabaseIcon225x225.bmp'));
AutoSize := True;
AutoSize := False;
Height := ScaleX(26);
Width := ScaleY(26);
Stretch := True;
Left := ScaleX(0);

DatabaseDirPage.SubCaptionLabel.Left := Width + ScaleX(10);
DatabaseDirPage.SubCaptionLabel.Top := DatabaseDirPage.SubCaptionLabel.Top + Height - DatabaseDirPage.Buttons[0].Height;
Top := WizardForm.SelectTasksPage.Top + ScaleY(0);
DatabaseDirPage.PromptLabels[0].Top := DatabaseDirPage.PromptLabels[0].Top + ScaleY(15);
DatabaseDirPage.Edits[0].Top := DatabaseDirPage.Edits[0].Top + ScaleY(20);
DatabaseDirPage.Buttons[0].Top := DatabaseDirPage.Buttons[0].Top + ScaleY(20);
end;
end;

上述代码段中,需要介绍的是下面一行,该行主要定义了按钮点击之后的事件处理函数DirBrowseButtonClick,使用@符号进行引用标识。

1
DatabaseDirPage.Buttons[0].OnClick := @DirBrowseButtonClick;

下面的代码,定义了页面中图片的位置,图片的缩放操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
BitmapImage2 := TBitmapImage.Create(WizardForm);
with BitmapImage2 do
begin
Parent := DatabaseDirPage.Surface;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\DatabaseIcon225x225.bmp'));
AutoSize := True;
AutoSize := False;
Height := ScaleX(26);
Width := ScaleY(26);
Stretch := True;
Left := ScaleX(0);

DatabaseDirPage.SubCaptionLabel.Left := Width + ScaleX(10);
DatabaseDirPage.SubCaptionLabel.Top := DatabaseDirPage.SubCaptionLabel.Top + Height - DatabaseDirPage.Buttons[0].Height;
Top := WizardForm.SelectTasksPage.Top + ScaleY(0);
DatabaseDirPage.PromptLabels[0].Top := DatabaseDirPage.PromptLabels[0].Top + ScaleY(15);
DatabaseDirPage.Edits[0].Top := DatabaseDirPage.Edits[0].Top + ScaleY(20);
DatabaseDirPage.Buttons[0].Top := DatabaseDirPage.Buttons[0].Top + ScaleY(20);
end;

如果在使用的过程中,发现页面加载过渡不顺畅,那么可以在函数function InitializeSetup()中展开图像文件,

1
ExtractTemporaryFile('DatabaseIcon225x225.bmp');

本文小结

这些背景知识是自己在完成该项任务的一开始具有的疑问,进而在茫茫文海中查阅,再收集整理成文的,这利于自己,也方便你我。如果你有问题或者不同的见解,欢迎关注我的微信公众号,然后留言讨论。


版权声明:
文章首发于 Jim Wang's blog , 转载文章请务必以超链接形式标明文章出处,作者信息及本版权声明。