Inno Setup ComboBox如何存储/访问值

时间:2015-07-03 17:20:54

标签: inno-setup

我正在创建一个带有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中的条目不会将值存储到字符串中,以便稍后在安装中调用它们。有人能告诉我我做错了吗?

2 个答案:

答案 0 :(得分:2)

procedure ComboChange(Sender: TObject);

ComboBox.OnChange := @ComboChange;

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

答案 1 :(得分:0)

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

这可能是它无法正常工作的原因。

as pointer :)这个(当它是一个事件时):

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;