Inno setup Inno设置组合框如何存储/访问值

Inno setup Inno设置组合框如何存储/访问值,inno-setup,Inno Setup,我正在创建一个带有组合框的自定义InputQueryWizardPage,并尝试存储如下值: [Code] var //Define global variables InfoPage: TInputQueryWizardPage; ComboBox: TNewComboBox; strComboValue: String; //Store the ComboBox string value procedure ComboChange(Sender: TObject); begin

我正在创建一个带有组合框的自定义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;

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

第一个组合更改应该是一个通知事件@ComboChange是一个指针。除非TNewComboBox将其重新定义为指针,否则它不应该编译,因为它没有选中inno帮助

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

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

会变得非常乏味

您所需要的只是:

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


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

该代码中没有任何错误(除了一些拼写错误)。
TNotifyEvent
签名及其赋值都是正确的。对于最终的代码,您可以简单地读取
ComboBox.Text
,但它假定OP希望将项目文本放入该变量中(目前问题尚不清楚)。关于方法分配,在Inno Setup Pascal脚本中,必须使用
@
运算符。谢谢。这就是我所需要的,一种访问ComboBox的字符串/文本值的方法。我不知道有
ComboBox.Text
存在。我曾经尝试过
ComboBox.Value
Value
Value[1]
,由于这些都不起作用,我想我需要编写一个过程,将值存储到字符串中,这样我就可以在另一个过程中访问它。也许在赋值之前,您正在读取该值。但一般来说,以这种方式存储值是一种非常糟糕(但非常常见)的做法。对你来说没有好处。这只会导致编码错误。如果由于性能原因而缓存该值,那么我可以告诉您,它几乎不会为您节省任何东西。这可以用不同的方式来做。如果在一个方法中读取该值,比如说,数十次,那么可以将其缓存在局部变量中。如果从几十个不同的方法中读取,您可以从组合框中读取一次并将其作为参数传递。这段代码的总体目标是什么?
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;