Вы не можете использовать Pascal код для генерации Registry
записей раздела.
Но вы можете использовать Препроцессор Inno Setup для генерации как ваших 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
запись является просто (бесполезным) примером. - Вызовите
AddExtensionsToCheckListBox
где-то из кода, где Вы создаете CheckListBox
.
См. мой другой ответ для менее элегантного, но более удобочитаемого решения.
Чтобы увидеть, что это делает, добавьте это в конец вашего скрипта:
#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;