Inno Setup ComboBox 如何 store/access 值

Inno Setup ComboBox how to store/access values

我正在创建一个带有 ComboBox 的自定义 InputQueryWizardPage 并尝试像这样存储值:

[Code]
var
//Define global variables
  InfoPage: TInputQueryWizardPage;
  ComboBox: TNewComboBox;
  strComboValue: String;

//Store the ComboBox string value
procedure ComboChange(Sender: TObject);
begin
  case ComboBox.ItemIndex of
    0:
    begin
      strComboValue := 'First Entry';
    end;
    1:
    begin
      strComboValue := 'Second Entry';
    end;
...
  end;
end;

procedure InitializeWizard();
var
  ComboLabel: TNewStaticText;
//Define the Equipment Information page
  InfoPage := CreateInputQueryPage(wpSelectTasks,
    'Equipment Information', 'Please enter the equipment information?',
    'Please enter the equipment connected, then click Next.');
  InfoPage.Add('Location:', False);
  InfoPage.Add('Type:', False);
  ComboBox := TNewComboBox.Create(InfoPage);
  ComboBox.Parent := InfoPage.Surface;
  ComboBox.Top := InfoPage.Edits[1].Top + (InfoPage.Edits[1].Top - InfoPage.Edits[0].Top); 
  ComboBox.Width := (InfoPage.Edits[0].Width / 2) - ScaleX(10);
  ComboBox.Style := csDropDown;
  ComboBox.Items.Add('First Entry');
  ComboBox.Items.Add('Second Entry');
...
  ComboBox.OnChange := @ComboChange;
  ComboLabel := TNewStaticText.Create(WizardForm);
  ComboLabel.Caption := 'Equipment:';
  ComboLabel.Top := ComboBox.Top - ScaleY(16);
  ComboLabel.Parent := InfoPage.Surface;
end;

问题在于,在 ComboBox 中选择条目不会将值存储到字符串中,以便我稍后可以在安装中调用它们。有人可以告诉我我做错了什么吗?

第一个 ComboChange 应该是一个 TNotifyEvent。 @ComboChange 是一个指针。它不应该编译,除非 TNewComboBox 将它重新定义为一个指针,它没有检查 inno 帮助。

这可能是它不起作用的原因。

作为指针 :) 这(当它是一个事件时):

procedure ComboChange(Sender: TObject);
begin
  case ComboBox.ItemIndex of
    0:
    begin
      strComboValue := 'First Entry';
    end;
    1:
    begin
      strComboValue := 'Second Entry';
    end;
...
  end;
end;

会变得非常乏味。

您只需要:

procedure ComboChange(Sender: TObject);
begin
  strComboValue := 'Whatever is default';
  if ComboBox.ItemIndex >= 0 then
    strComboValue := ComboBox.Items[ComboBox.ItemIndex];
end;
procedure ComboChange(Sender: TObject);

ComboBox.OnChange := @ComboChange;

根本不需要。要从 ComboBox 访问存储的值,只需阅读 ComboBox.Text。谢谢@TLama。