我在 inno 中有代码来检查特定文本框的值是否仅包含字母,但代码会引发编译错误。
close block (']') expected
下面是我的代码。
if not DBPage.Values[0] in ['a'..'z', 'A'..'Z'] then
begin
MsgBox('You must enter alphabets only.', mbError, MB_OK);
end;
DBPage.Values[0]
我的自定义页面中的文本框在哪里。
我在 inno 中有代码来检查特定文本框的值是否仅包含字母,但代码会引发编译错误。
close block (']') expected
下面是我的代码。
if not DBPage.Values[0] in ['a'..'z', 'A'..'Z'] then
begin
MsgBox('You must enter alphabets only.', mbError, MB_OK);
end;
DBPage.Values[0]
我的自定义页面中的文本框在哪里。
首先,InnoSetup 脚本不允许常量设置范围。即使你的代码不会做你想做的事。通过使用DBPage.Values[0]
,您访问的是整个字符串值,而不是您可能想要的单个字符。
如果您不想为所有字母字符编写一个非常复杂的条件,您可以从 Windows API 函数开始IsCharAlpha
。以下代码显示了如何在您的代码中使用它:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Code]
#ifdef UNICODE
#define AW "W"
#else
#define AW "A"
#endif
var
DBPage: TInputQueryWizardPage;
function IsCharAlpha(ch: Char): BOOL;
external 'IsCharAlpha{#AW}@user32.dll stdcall';
function NextButtonClick(CurPageID: Integer): Boolean;
var
S: string;
I: Integer;
begin
Result := True;
// store the edit value to a string variable
S := DBPage.Values[0];
// iterate the whole string char by char and check if the currently
// iterated char is alphabetical; if not, don't allow the user exit
// the page, show the error message and exit the function
for I := 1 to Length(S) do
if not IsCharAlpha(S[I]) then
begin
Result := False;
MsgBox('You must enter alphabets only.', mbError, MB_OK);
Exit;
end;
end;
procedure InitializeWizard;
begin
DBPage := CreateInputQueryPage(wpWelcome, 'Caption', 'Description', 'SubCaption');
DBPage.Add('Name:', False);
DBPage.Values[0] := 'Name';
end;
出于好奇,以下脚本会阻止编辑输入除字母字符之外的任何其他内容:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Code]
#ifdef UNICODE
#define AW "W"
#else
#define AW "A"
#endif
var
DBPage: TInputQueryWizardPage;
function IsCharAlpha(ch: Char): BOOL;
external 'IsCharAlpha{#AW}@user32.dll stdcall';
procedure AlphaEditKeyPress(Sender: TObject; var Key: Char);
begin
if not IsCharAlpha(Key) and (Key <> #8) then
Key := #0;
end;
procedure InitializeWizard;
var
ItemIndex: Integer;
begin
DBPage := CreateInputQueryPage(wpWelcome, 'Caption', 'Description', 'SubCaption');
ItemIndex := DBPage.Add('Name:', False);
DBPage.Values[ItemIndex] := 'Name';
DBPage.Edits[ItemIndex].OnKeyPress := @AlphaEditKeyPress;
end;