Inno Setup - 创建具有输入长度和格式限制的用户输入查询页面并使用输入

时间:2016-01-08 18:55:42

标签: inno-setup pascalscript

所以,正如标题所说,我想创建一个用户输入查询页面(这很简单),但我希望该字段拒绝空格字符并将输入限制为不超过15人物(对我来说有点困难)。但后来我需要将输入写入文件,我也不知道该怎么做。

这是我的代码现在的样子:

var
  Page: TInputQueryWizardPage;

Procedure InitializeWizard();
Begin
  Page := CreateInputQueryPage(wpSelectTasks, 'Choose a Profile Name', 'This name will be used as your Profile Name', 'Please specify a name to be used as your Profile Name (make sure it''s unique), then click Next.');
  Page.Add('Name:', False);
  Page.Values[0] := 'YourName';
End;

function GetUserInput(param: String): String;
Begin
  result := Page.Values[0];
End;

如您所见,此代码对字符没有限制。这是我需要帮助的第一件事。

我的第二个问题是写下这个价值。

我再次使用非标准的INI文件,而不是我的错。所以这个文件非常类似于标准的INI,它只是没有部分,只有键和值。 Inno Setup自己的INI部分对我没用,因为它不允许输入"外部"一节,所以我想我必须把它当成一个文本文件(?)。

我需要将结果作为值写入一个名为'个人资料名称的密钥'。

1 个答案:

答案 0 :(得分:2)

长度限制很简单,请使用TPasswordEdit.MaxLength属性。

要阻止用户键入空格,请在TEdit.OnKeyPress事件中对其进行过滤。

但是你需要在最后明确地检查空格,因为例如也可以从剪贴板粘贴空格。要进行最终检查,请使用TWizardPage.OnNextButtonClick事件。

var
  Page: TInputQueryWizardPage;

{ Prevent user from typing spaces ... }
procedure EditKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = ' ' then Key := #0;
end;

{ ... but check anyway if some spaces were sneaked in }
{ (e.g. by pasting from a clipboard) }
function ValidateInput(Sender: TWizardPage): Boolean;
begin
  Result := True;

  if Pos(' ', Page.Values[0]) > 0 then
  begin
    MsgBox('Profile Name cannot contain spaces.', mbError, MB_OK);
    Result := False;
  end;
end;

procedure InitializeWizard();
begin
  Page := CreateInputQueryPage(...);
  Page.OnNextButtonClick := @ValidateInput;
  Page.Add('Name:', False);
  Page.Edits[0].MaxLength := 15;
  Page.Edits[0].OnKeyPress := @EditKeyPress;
  Page.Values[0] := 'YourName';
  ...
end;

另一种可能性是实施OnChange 请参阅Inno Setup Disable Next button when input is not valid

如您所知,要使用输入的值,请通过Page.Values[0]访问它。

格式化自定义INI文件格式的值是一个完全不同的问题,ask one