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