我有一个使用Inno Setup的安装程序,允许用户在安装时选择文件位置。该文件有点像答案文件,以帮助安装。
对于此提示,我使用TInputDirWizardPage.
当用户使用此文件时,它可以正常工作,但如果他不愿意,它会自动抛出错误告诉他必须输入路径。
有没有办法不强制验证,以便用户可以点击下一步并让我弄清楚他没有文件?
答案 0 :(得分:4)
正如TLama所说,没有办法不强迫验证,它是硬编码的。但这并不意味着我们无法破解它![/ p>
在下面的示例中,我们覆盖表单NextButton
click,如果目录为空,我们只需输入一个值来通过验证,之后我们就可以清除目录了。
var
InputDirPage: TInputDirWizardPage;
Old_WizardForm_NextButton_OnClick: TNotifyEvent;
procedure WizardForm_NextButton_OnClick(Sender: TObject);
var
IsDirEmpty: Boolean;
begin
if (WizardForm.CurPageID = InputDirPage.ID) and (InputDirPage.Values[0] = '') then
begin
IsDirEmpty := True;
InputDirPage.Values[0] := WinDir; { Force value to pass validation }
end;
Old_WizardForm_NextButton_OnClick(Sender);
if IsDirEmpty then
InputDirPage.Values[0] := '';
end;
procedure InitializeWizard();
begin
InputDirPage := CreateInputDirPage(
wpWelcome, { AfterID }
'ACaption',
'ADescription',
'ASubCaption',
False, { AAppendDir }
'' { ANewFolderName }
);
InputDirPage.Add('doc dir:');
{ override wizard NextButton click }
Old_WizardForm_NextButton_OnClick := WizardForm.NextButton.OnClick;
WizardForm.NextButton.OnClick := @WizardForm_NextButton_OnClick;
end;
答案 1 :(得分:3)
不幸的是没有。这是在TInputDirWizardPage.NextButtonClick
方法中硬编码的,该方法通过调用ValidateCustomDirEdit
函数在内部验证所有编辑框,该函数不关心编辑是否故意为空;它只检查它是否包含有效的目录路径。或者,换句话说,TInputDirWizardPage
字段不是可选字段,它们此时必须包含有效路径。
好吧,我觉得这不是预期的行为。如果比较文件和目录输入页面,它们会有所不同。虽然在文件输入页面中您可以将编辑框留空,但在dir输入页面中则不能。我认为,如果检查编辑框是否为空并且仅在不是,则验证其内容,这就足够了。您可以自己检查编辑是否为空(如果您需要必填字段),并在该页面上停止用户,但如果编辑为空,则无法禁止该验证。
在您的情况下,我会考虑使用TInputFileWizardPage
来讨论文件输入或创建自己的目录输入页面。