1

我是 Pascal 和 FastReport 的新手。这个问题大概可以在没有 FastReport 知识的情况下回答。帕斯卡是德尔福。快速报告4。编辑:我正在使用帕斯卡脚本。

我有一个接受 8 个字符的字符串作为输入的文本框。每个字符都应该是数字。我正在尝试将每个字符验证为数字。我试过使用 val 函数...

Procedure Val(S : String; var R: Real; Code : Integer);
  begin
  end;

procedure thisinputOnChange(Sender: TfrxComponent);
    var
      S     : String;
      error : Integer;
      R     : Real;    
   begin

    S := thisinput.lines.text; 
   Val (S, R, error);        
     If error > 0 then
   Button2.enabled := False;       
  end;

我在网上得到了这个代码。解释说如果字符不能转换为整数,该函数将返回代码大于零的错误。这个解释正确吗?我误解了吗?

现在,如果验证失败,我正在尝试将按钮的 enabled 属性设置为 false。我可能会将其更改为消息。现在,我想通过设置按钮属性让它工作。

我不确定是否应该使用 onChange 事件或其他事件。我也不确定是否需要在循环中将输入发送到 val 函数。就像我说的,我只是在学习如何使用这个功能。

我能够验证长度。此代码有效...

  procedure thisinputOnChange(Sender: TfrxComponent);

  begin

     if length(thisinput.lines.text) = 8 then          
        Button2.enabled := True;

  end;  

有什么建议么?我应该使用 val 函数还是其他什么?如果我需要提供更多信息,请告诉我。不过,我可能要等到晚些时候才能回来查看。谢谢你的帮助。

4

2 回答 2

3

procedure System.Val(S: String; var V; var Code: Integer);是一个内在的过程。你不需要自己定义它。

您可以使用它来验证您的字符串是否为整数。

var
  myInt,error : Integer;
...
Val(s,myInt,error);
Button2.Enabled := (error = 0); // ok if error is zero

如果字符串无效,错误将指向字符串中的第一个无效字符。


作为一个选项,您还可以使用

function SysUtils.TryStrToInt(const S: string; out Value: Integer): Boolean;

Button2.Enabled := TryStrToInt(s,myInt); // ok if true

Val()编辑:可以在此处找到 使用 pascal 脚本的示例: Pascal script examples.

procedure MyVal(const s: string; var n, z: Integer);
begin
  Val(s, n, z);
end;

OnCompile注册脚本时在方法中注册过程:

Sender.AddFunction(@MyVal, 'procedure Val(const s: string; var n, z: Integer)');

通过查看文档FastScript 1.9 Scripting library,有一个整数验证功能

function ValidInt(cInt: String): Boolean

要访问此功能,请遵循文档 (P21) 中的指南:

“要访问这些函数,请将 fsGlobalUnit 引用传递给 TfsScript.Parent 属性。”

注意:我无法添加文档链接,但在 google 上快速搜索应该可以找到。

于 2013-11-12T22:36:00.113 回答
3

您没有指定 Delphi 版本。自 Delphi 2009 以来,您可以设置 TEdit 的 NumbersOnly 属性以将输入限制为数字。

于 2013-11-12T23:41:02.283 回答