在不使用全局变量的情况下从自定义 Inno Setup 向导页面读取值
Reading values from custom Inno Setup wizard pages without using global variables
在这个用于创建自定义 CreateInputOptionPage
的支持页面上,他们建议通过将页面值分配给变量来存储页面值。然而,目前还不清楚这项任务应该在什么时候进行。'
据我所知,如果您在创建页面时分配此权限,您将获得默认值。这是有道理的,因为在创建页面时,用户还没有输入任何 "Input Query"。
因此,我想在单击 'Next' 按钮时使用 function NextButtonClick(CurPageID: Integer): Boolean;
将页面中的值分配给变量
为此,我需要在 NextButtonClick
函数中访问页面的变量 (Page.Values[0]
)。由于 Page
是在不同的函数中定义的,访问这些值的唯一方法是让 Page
成为全局变量吗?这就是我决心要做的,但我想知道是否有人可以替代全局变量。
到目前为止我的代码存根。
[Code]
var
Page: TInputOptionWizardPage;
InstallationTypeIsClient: boolean;
procedure InitializeWizard();
begin
Page := CreateInputOptionPage(wpWelcome,'Installation Type', 'Select Installation Type', 'No really, do some selecting', True, False)
Page.Add('Server Install');
Page.Add('Client Install');
Page.Values[1] := True;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
if CurPageID=100 then
begin
InstallationTypeIsClient := Page.Values[1];
MsgBox('InstallationTypeIsClient value is ' + Format('%d', [InstallationTypeIsClient]), mbInformation, MB_OK);
end;
Result := True;
end;
使用全局变量来存储对自定义页面的引用是正确且最简单的方法。
相关问题: .
尽管是否真的需要将用户值存储到另一个变量是值得怀疑的。只需在需要时从自定义页面读取值即可。
一般来说,使用全局变量确实不受欢迎。但那是在您开发独立代码时。在这种情况下,您只是为现有应用程序实现事件挂钩,因此您别无选择。
唯一的其他方法是在 WizardForm
的子控件中递归查找自定义页面。代码很多,效率很低。
有关递归组件迭代的示例,请参阅我对 的回答。
在这个用于创建自定义 CreateInputOptionPage
的支持页面上,他们建议通过将页面值分配给变量来存储页面值。然而,目前还不清楚这项任务应该在什么时候进行。'
据我所知,如果您在创建页面时分配此权限,您将获得默认值。这是有道理的,因为在创建页面时,用户还没有输入任何 "Input Query"。
因此,我想在单击 'Next' 按钮时使用 function NextButtonClick(CurPageID: Integer): Boolean;
为此,我需要在 NextButtonClick
函数中访问页面的变量 (Page.Values[0]
)。由于 Page
是在不同的函数中定义的,访问这些值的唯一方法是让 Page
成为全局变量吗?这就是我决心要做的,但我想知道是否有人可以替代全局变量。
到目前为止我的代码存根。
[Code]
var
Page: TInputOptionWizardPage;
InstallationTypeIsClient: boolean;
procedure InitializeWizard();
begin
Page := CreateInputOptionPage(wpWelcome,'Installation Type', 'Select Installation Type', 'No really, do some selecting', True, False)
Page.Add('Server Install');
Page.Add('Client Install');
Page.Values[1] := True;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
if CurPageID=100 then
begin
InstallationTypeIsClient := Page.Values[1];
MsgBox('InstallationTypeIsClient value is ' + Format('%d', [InstallationTypeIsClient]), mbInformation, MB_OK);
end;
Result := True;
end;
使用全局变量来存储对自定义页面的引用是正确且最简单的方法。
相关问题:
尽管是否真的需要将用户值存储到另一个变量是值得怀疑的。只需在需要时从自定义页面读取值即可。
一般来说,使用全局变量确实不受欢迎。但那是在您开发独立代码时。在这种情况下,您只是为现有应用程序实现事件挂钩,因此您别无选择。
唯一的其他方法是在 WizardForm
的子控件中递归查找自定义页面。代码很多,效率很低。
有关递归组件迭代的示例,请参阅我对