从注册表中检索组合框的值,并通过覆盖安装程序的第二个 运行 的默认值来填充它
Retrieve values for a combobox from the registry and fill it by overwriting the default value for the second run of the installer
我已经在 TInputQueryWizardPage
页面中有一个 combobox
,但问题是我不知道如何在从第一个 运行 写入后从注册表中检索选定的值.
我的组合框代码是:
AuthComboBox := TNewComboBox.Create(ReportPage);
AuthComboBox.Parent := ReportPage.Edits[1].Parent;
AuthComboBox.Left := ReportPage.Edits[1].Left;
AuthComboBox.Top := ReportPage.Edits[1].Top;
AuthComboBox.Width := ReportPage.Edits[1].Width;
AuthComboBox.Height := ReportPage.Edits[1].Height;
AuthComboBox.TabOrder := ReportPage.Edits[1].TabOrder;
AuthComboBox.Items.Add('Password Authentication');
AuthComboBox.Items.Add('Windows Authentication');
AuthComboBox.ItemIndex := 0;
{ Hide the original edit box }
ReportPage.PromptLabels[1].FocusControl := AuthComboBox;
ReportPage.Edits[1].Visible := False;
AuthComboBox.OnChange := @ComboBoxChange;
AuthComboBox.Items.Add
后面的值是:
function GetAuthCombo(Param: String): String;
begin
case AuthComboBox.ItemIndex of
0: Result := 'False';
1: Result := 'True';
end;
end;
我使用以下代码将它们写入注册表:
if (CurStep=ssPostInstall) then
begin
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\RiskValue',
'ReportProdAuthType', ExpandConstant('{code:GetAuthCombo}'));
end;
如果我从 combobox
选择第二个选择 Windows 身份验证,当我 运行第二次安装。
替换为:
AuthComboBox.ItemIndex := 0;
与:
var
S: string;
begin
{ ... }
if RegQueryStringValue(HKLM, 'Software\RiskValue', 'ReportProdAuthType', S) and
SameText(S, 'True') then
begin
AuthComboBox.ItemIndex := 1;
end
else
begin
AuthComboBox.ItemIndex := 0;
end;
{ ... }
end;
此外,使用 ExpandConstant
获取注册表项的值也是过度设计的。
从 [Registry]
部分使用它(脚本常量的用途):
[Registry]
Root: HKLM; Subkey: "Software\RiskValue"; ValueType: string; \
ValueName: "ReportProdAuthType"; ValueData: "{code:GetAuthCombo}"
或者,如果你想使用 Pascal 脚本,直接使用 GetAuthCombo
:
if (CurStep=ssPostInstall) then
begin
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\RiskValue',
'ReportProdAuthType', GetAuthCombo(''));
end;
那么您甚至可以删除 Param: String
,或者实际上什至完全内联 GetAuthCombo
函数,除非您在别处使用它。
var
S: string;
begin
{ ... }
if (CurStep=ssPostInstall) then
begin
case AuthComboBox.ItemIndex of
0: S := 'False';
1: S := 'True';
end;
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\RiskValue', 'ReportProdAuthType', S);
end;
end;
我已经在 TInputQueryWizardPage
页面中有一个 combobox
,但问题是我不知道如何在从第一个 运行 写入后从注册表中检索选定的值.
我的组合框代码是:
AuthComboBox := TNewComboBox.Create(ReportPage);
AuthComboBox.Parent := ReportPage.Edits[1].Parent;
AuthComboBox.Left := ReportPage.Edits[1].Left;
AuthComboBox.Top := ReportPage.Edits[1].Top;
AuthComboBox.Width := ReportPage.Edits[1].Width;
AuthComboBox.Height := ReportPage.Edits[1].Height;
AuthComboBox.TabOrder := ReportPage.Edits[1].TabOrder;
AuthComboBox.Items.Add('Password Authentication');
AuthComboBox.Items.Add('Windows Authentication');
AuthComboBox.ItemIndex := 0;
{ Hide the original edit box }
ReportPage.PromptLabels[1].FocusControl := AuthComboBox;
ReportPage.Edits[1].Visible := False;
AuthComboBox.OnChange := @ComboBoxChange;
AuthComboBox.Items.Add
后面的值是:
function GetAuthCombo(Param: String): String;
begin
case AuthComboBox.ItemIndex of
0: Result := 'False';
1: Result := 'True';
end;
end;
我使用以下代码将它们写入注册表:
if (CurStep=ssPostInstall) then
begin
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\RiskValue',
'ReportProdAuthType', ExpandConstant('{code:GetAuthCombo}'));
end;
如果我从 combobox
选择第二个选择 Windows 身份验证,当我 运行第二次安装。
替换为:
AuthComboBox.ItemIndex := 0;
与:
var
S: string;
begin
{ ... }
if RegQueryStringValue(HKLM, 'Software\RiskValue', 'ReportProdAuthType', S) and
SameText(S, 'True') then
begin
AuthComboBox.ItemIndex := 1;
end
else
begin
AuthComboBox.ItemIndex := 0;
end;
{ ... }
end;
此外,使用 ExpandConstant
获取注册表项的值也是过度设计的。
从 [Registry]
部分使用它(脚本常量的用途):
[Registry]
Root: HKLM; Subkey: "Software\RiskValue"; ValueType: string; \
ValueName: "ReportProdAuthType"; ValueData: "{code:GetAuthCombo}"
或者,如果你想使用 Pascal 脚本,直接使用 GetAuthCombo
:
if (CurStep=ssPostInstall) then
begin
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\RiskValue',
'ReportProdAuthType', GetAuthCombo(''));
end;
那么您甚至可以删除 Param: String
,或者实际上什至完全内联 GetAuthCombo
函数,除非您在别处使用它。
var
S: string;
begin
{ ... }
if (CurStep=ssPostInstall) then
begin
case AuthComboBox.ItemIndex of
0: S := 'False';
1: S := 'True';
end;
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\RiskValue', 'ReportProdAuthType', S);
end;
end;