所以,正如标题所说,我想创建一个用户输入查询页面(这很简单),但我希望该字段拒绝空格字符并将输入限制为不超过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部分对我没用,因为它不允许输入"外部"一节,所以我想我必须把它当成一个文本文件(?)。
我需要将结果作为值写入一个名为'个人资料名称的密钥'。
答案 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。