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。
我正在创建一个带有 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。