Получите значения для выпадающего списка из реестра и заполните его, переписав значение по умолчанию для второго запуска программы установки. - PullRequest
1 голос
/ 21 июня 2019

У меня уже есть combobox на странице TInputQueryWizardPage, но проблема в том, что я не знаю, как извлечь выбранное значение из реестра после записи из первого запуска.

Мой код дляполе со списком:

  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;

Если явыберите второй вариант проверки подлинности Windows из combobox Я ожидаю, что при повторном запуске установщика во второй раз у меня будет то же значение (проверка подлинности Windows), что и значение по умолчанию.

1 Ответ

1 голос
/ 21 июня 2019

Заменить это:

  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 Script, используйте 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;
...