So, as the title says, I want to create a User Input Query Page (that's easy), but then I want the field to reject space character(s) and limit the input to no more than 15 characters (a bit more difficult for me). But then I need to write the input to a file, which I'm also not sure how to do.
Here's what my code looks like now:
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;
As you can see, this code has no limitations for characters. That's the first thing I need help with.
The length limit is easy, use TPasswordEdit.MaxLength
property.
To prevent the user from typing a space, filter it in TEdit.OnKeyPress
event.
But you need to check explicitly for spaces in the end anyway, because the spaces can also be pasted from clipboard for example. For a final check, use TWizardPage.OnNextButtonClick
event.
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;
Another possibility is to implement the OnChange
.
See Inno Setup Disable Next button when input is not valid.
As you already know, to use the entered value, access it via Page.Values[0]
.