在 Inno Setup 中创建页面,用户可以从安装文件中打包的文件夹中 select 文件
In Inno Setup create page where the user may select files from a folder that is packaged in the setup file
在 Inno Setup 中,我想创建一个页面,其中包含一个复选框列表,这些复选框与我在 [Files]
部分中列出的文件夹中的文件相对应。
如何读取此文件夹中的文件,然后仅复制用户选择的那些文件?现在,我什至没有得到列表,因为文件夹 {tmp}\list
不存在。
[Files]
Source: "list\*"; DestDir:"{tmp}"; Flags: recursesubdirs
[Code]
var
karten : TNewCheckListBox;
FileListBox : TNewListBox;
KartenFormular: TWizardPage;
procedure KartenEinlesen(const Directory: string; Files: TStrings);
var
FindRec: TFindRec;
begin
Files.Clear;
if FindFirst(ExpandConstant(Directory + '*'), FindRec) then
try
repeat
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 1 then
Files.Add(FindRec.Name);
until
not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;
procedure InitializeWizard;
var
AfterID: Integer;
begin
AfterID := wpSelectTasks;
KartenFormular :=
CreateCustomPage(
AfterID, 'Kartendaten', 'Ort für den Ordner Kartendaten auswählen');
FileListBox := TNewListBox.Create(WizardForm);
FileListBox.Parent := KartenFormular.Surface;
FileListBox.Align := alClient;
AfterID := KartenFormular.ID;
KartenEinlesen('{tmp}\maptiles\*',FileListBox.Items)
end;
InitializeWizard
发生在最开始,远在文件被提取之前。此外,将(所有)文件提取到 {tmp}
然后在用户选择要安装的文件后将它们复制到其他地方的效率很低。而且您必须编写实际安装过程的代码。
正确的解决方案是在编译(而非安装)时生成列表框内容,使用 Inno Setup preprocessor。
以下问题显示了类似的内容。它为每个文件创建一个 Inno Setup component。它甚至可能比自定义页面更好。
但如果您想要自定义页面,解决方案不会有太大差异。您只需为每个文件生成 FileListBox.Items.Add
调用,而不是 [Components]
部分条目。代码有点复杂,因为它递归地工作(你似乎不需要)。对于平面解,可以简化。
另请注意,CreateInputOptionPage
可以更轻松地创建带有复选框的自定义页面。
在 Inno Setup 中,我想创建一个页面,其中包含一个复选框列表,这些复选框与我在 [Files]
部分中列出的文件夹中的文件相对应。
如何读取此文件夹中的文件,然后仅复制用户选择的那些文件?现在,我什至没有得到列表,因为文件夹 {tmp}\list
不存在。
[Files]
Source: "list\*"; DestDir:"{tmp}"; Flags: recursesubdirs
[Code]
var
karten : TNewCheckListBox;
FileListBox : TNewListBox;
KartenFormular: TWizardPage;
procedure KartenEinlesen(const Directory: string; Files: TStrings);
var
FindRec: TFindRec;
begin
Files.Clear;
if FindFirst(ExpandConstant(Directory + '*'), FindRec) then
try
repeat
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 1 then
Files.Add(FindRec.Name);
until
not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;
procedure InitializeWizard;
var
AfterID: Integer;
begin
AfterID := wpSelectTasks;
KartenFormular :=
CreateCustomPage(
AfterID, 'Kartendaten', 'Ort für den Ordner Kartendaten auswählen');
FileListBox := TNewListBox.Create(WizardForm);
FileListBox.Parent := KartenFormular.Surface;
FileListBox.Align := alClient;
AfterID := KartenFormular.ID;
KartenEinlesen('{tmp}\maptiles\*',FileListBox.Items)
end;
InitializeWizard
发生在最开始,远在文件被提取之前。此外,将(所有)文件提取到 {tmp}
然后在用户选择要安装的文件后将它们复制到其他地方的效率很低。而且您必须编写实际安装过程的代码。
正确的解决方案是在编译(而非安装)时生成列表框内容,使用 Inno Setup preprocessor。
以下问题显示了类似的内容。它为每个文件创建一个 Inno Setup component。它甚至可能比自定义页面更好。
但如果您想要自定义页面,解决方案不会有太大差异。您只需为每个文件生成 FileListBox.Items.Add
调用,而不是 [Components]
部分条目。代码有点复杂,因为它递归地工作(你似乎不需要)。对于平面解,可以简化。
另请注意,CreateInputOptionPage
可以更轻松地创建带有复选框的自定义页面。