您不能使用 Pascal 代码来生成Registry
节条目。
但你可以使用Inno安装预处理器 https://jrsoftware.org/ispphelp/生成你的Registry
部分以及将扩展添加到的代码CheckListBox
。像这样的事情:
#define Extension(Mode, Ext) \
Mode == "Registry" ? \
"Root: HKCU; Subkey: ""Software\My Company""; ValueType: string; ValueName: """ + \
Ext + """; ValueData: ""yes""; Check: RegisterExtension('" + Ext + "')" + NewLine \
: Mode == "Check" ? \
" if (Ext = '" + Ext + "') and CheckListBox.Checked[I] then Exit;" + NewLine + \
" Inc(I); " + NewLine \
: Mode == "AddCheckbox" ? \
" CheckListBox.AddCheckBox('" + Ext + "', '', 0, True, True, False, True, nil);" + \
NewLine \
: ""
#define Extensions(Mode) \
Extension(Mode, 'jpg') + \
Extension(Mode, 'gif') + \
Extension(Mode, 'png') + \
""
[Registry]
#emit Extensions("Registry")
[Code]
var
CheckListBox: TNewCheckListBox;
function RegisterExtension(Ext: string): Boolean;
var
I: Integer;
begin
I := 0;
Result := True;
#emit Extensions("Check")
Result := False;
end;
procedure AddExtensionsToCheckListBox;
begin
#emit Extensions("AddCheckbox")
end;
-
Registry
条目只是一个(无用的)示例。
- Call
AddExtensionsToCheckListBox
代码中的某个地方,您正在创建CheckListBox
.
See my 其他答案 https://stackoverflow.com/q/60460082/850848#60502833一个不太优雅但更具可读性的解决方案。
要查看它的作用,请将其添加到脚本的末尾:
#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")
检查Preprocessed.iss
编译后。它应该给你类似的东西(添加空行和换行以提高可读性):
[Registry]
Root: HKCU; Subkey: "Software\My Company"; ValueType: string; ValueName: "jpg"; \
ValueData: "yes"; Check: RegisterExtension('jpg')
Root: HKCU; Subkey: "Software\My Company"; ValueType: string; ValueName: "gif"; \
ValueData: "yes"; Check: RegisterExtension('gif')
Root: HKCU; Subkey: "Software\My Company"; ValueType: string; ValueName: "png"; \
ValueData: "yes"; Check: RegisterExtension('png')
[Code]
var
CheckListBox: TNewCheckListBox;
function RegisterExtension(Ext: string): Boolean;
var
I: Integer;
begin
I := 0;
Result := True;
if (Ext = 'jpg') and CheckListBox.Checked[I] then Exit;
Inc(I);
if (Ext = 'gif') and CheckListBox.Checked[I] then Exit;
Inc(I);
if (Ext = 'png') and CheckListBox.Checked[I] then Exit;
Inc(I);
Result := False;
end;
procedure AddExtensionsToCheckListBox;
begin
CheckListBox.AddCheckBox('jpg', '', 0, True, True, False, True, nil);
CheckListBox.AddCheckBox('gif', '', 0, True, True, False, True, nil);
CheckListBox.AddCheckBox('png', '', 0, True, True, False, True, nil);
end;
对于使用有些不同的方法在我写这个答案时,这些内容不可用:
[Code] 部分中的数组变量和动态访问 https://stackoverflow.com/q/73337820/850848