Inno setup Inno设置中的文本框中需要一个数字

Inno setup Inno设置中的文本框中需要一个数字,inno-setup,pascalscript,Inno Setup,Pascalscript,我在这里找到了我需要的代码。仅允许在文本框中写入数字。但我仍然想要更多,如果没有在这个文本框中写下数字,就不能提供“下一步”按钮 你能帮我吗 procedure NumbersOnly(发送方:TObject;变量键:Char); 变量 S:字符串; 开始 S:=('1234567890'#8); 如果位置(键,S)=0,则 键:=#0; 结束; 当用户到达编辑框所在的页面时,您可以将“下一步”按钮设置为启用或禁用。除了您需要监控该编辑框的更改,以根据该编辑框中是否输入了内容来启用或禁用“下一步

我在这里找到了我需要的代码。仅允许在文本框中写入数字。但我仍然想要更多,如果没有在这个文本框中写下数字,就不能提供“下一步”按钮

你能帮我吗

procedure NumbersOnly(发送方:TObject;变量键:Char);
变量
S:字符串;
开始
S:=('1234567890'#8);
如果位置(键,S)=0,则
键:=#0;
结束;

当用户到达编辑框所在的页面时,您可以将“下一步”按钮设置为启用或禁用。除了您需要监控该编辑框的更改,以根据该编辑框中是否输入了内容来启用或禁用“下一步”按钮。为此,您需要为
OnChange
事件编写一个处理程序。以下是一个例子:

[设置]
AppName=我的程序
AppVersion=1.5
DefaultDirName={pf}\My程序
[守则]
变量
MyEdit:TNewEdit;
MyPage:TWizardPage;
程序更改(发送方:TObject);
开始
{如果编辑框不为空,则启用“下一步”按钮;否则禁用}
WizardForm.NextButton.Enabled:=MyEdit.Text“”;
结束;
过程MyEditKeyPress(发送方:TObject;变量键:Char);
变量
键码:整数;
开始
{仅允许数字}
键码:=Ord(键);

如果不是((KeyCode=8)或((KeyCode>=48)和((KeyCode),则@TLama的答案有两个缺陷:

  • 用户可以通过使用编辑框上下文菜单中的“粘贴”命令(也可能通过其他类型的输入方法)绕过检查

    要解决此问题,您可以引入最后一种方法签入

    我还建议在此处添加空输入检查,而不是
    MyEditChange
    ,因为它允许向用户提供反馈,解释错误

  • 另一方面,Ctrl+C、Ctrl+V和Ctrl+X键不起作用。尤其是缺少Ctrl+V键让人不舒服

    要解决此问题,请允许在MyEditKeyPress中使用这些控制字符

[代码]
变量
MyEdit:TNewEdit;
MyPage:TWizardPage;
程序验证;
开始
{如果编辑框不为空,则启用“下一步”按钮;否则禁用}
WizardForm.NextButton.Enabled:=(MyEdit.Text“”);
结束;
程序更改(发送方:TObject);
开始
验证性编辑;
结束;
函数IsDigit(C:Char):布尔值;
开始

结果:=(C>='0')和(C这是我基于ASCII码中的键使用的方式:

procedure justNumbers(Sender: TObject; var Key: Char);
begin
  if not ((Key = #8) or (Key = #43) or ((Key >= #48) and (Key <= #57)))
          then
  begin
    Key := #0;
  end;
end; 
过程编号(发送方:TObject;变量键:Char);
开始

如果不是((键=#8)或((键=#43)或((键>=#48)和(很抱歉,你的问题现在没有什么意义。你想只在编辑框中输入内容时才启用“下一步”按钮吗?谢谢,特拉娜。这几乎是完美的。你能帮我写以下代码吗:1-在文本框之前创建标签2-并在安装结束时将文本框的编号写入txt中我非常非常感谢你的帮助。我的回答是关于编辑框的,就像你的问题一样,但你要求的更好,更适合所谓的输入查询页面。我想对你的整个任务来说会更好。这就是我所需要的。非常感谢你。祝你好运。马丁:
,因为我:=1到长度h(MyEdit.Text)
-1您没有测试last
Char
@moskito-x谢谢。修复了。我不理解您的问题。
NumbersOnly
在Inno Setup API中不存在。我也不知道您所说的
Edit1.Caption:=
。尽管您是对的,但可以使用
GWL\u样式
ES\u NUMBER
来实现这一点。但我的回答显示了更通用的实现,可用于更广泛的格式,而不仅仅是数字。我不明白你的问题->看这里: